gpt4 book ai didi

c# - HttpClient PostAsync() 不起作用

转载 作者:行者123 更新时间:2023-12-04 12:18:48 31 4
gpt4 key购买 nike

在我的 Xamarin 表单应用程序中

我正在尝试将 Json 字符串发布到我的网络服务,即 RestFul API
当我使用以下代码时:

public static async Task<bool> SaveRolAsync(Methods Method, Role Rol)
{
try
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var uri = ("http://myservice.com/roles/");
HttpResponseMessage response = null;

try
{
var jSettings = new JsonSerializerSettings();
jSettings.NullValueHandling = NullValueHandling.Ignore;
jSettings.MissingMemberHandling = MissingMemberHandling.Ignore;

var JsonData = JsonConvert.SerializeObject(Rol);
var RoleContent = new StringContent(JsonData, Encoding.UTF8, "application/json");

if (Method == Methods.PUT || Method == Methods.PATCH)
{
response = await client.PutAsync(uri, RoleContent);
}

if (Method == Methods.POST)
{
response = await client.PostAsync(uri, RoleContent);
}

if (Method == Methods.DELETE)
{
throw new NotImplementedException();
}

return response.IsSuccessStatusCode;

}
catch (JsonException jse)
{
return false;
}
}
catch (Exception ex)
{
// Exceptions Throws here
// @T This line i got The request requires buffering data to succeed
return false;
}
}

异常抛出:

The request requires buffering data to succeed



堆栈跟踪:

{System.Net.WebException: The request requires buffering data to succeed. at System.Net.HttpWebRequest.EndGetResponse (System.IAsyncResult asyncResult) [0x00064] in :0 at System.Threading.Tasks.TaskFactory1[TResult].FromAsyncCoreLogic
(System.IAsyncResult iar, System.Func
2[T,TResult] endFunction, System.Action1[T] endAction, System.Threading.Tasks.Task1[TResult] promise, System.Boolean requiresSynchronization) [0x00014] in :0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in :0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in :0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in :0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in :0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1+ConfiguredTaskAwaiter[TResult].GetResult
() [0x00000] in <a66f207c1e5949e9a252c01e27bbd34e>:0 at
System.Net.Http.HttpClientHandler+<SendAsync>c__async0.MoveNext ()
[0x0041e] in <566d6cf6576345098cb5e08ad43d5e78>:0
--- End of stack trace from previous location where exception was thrown --- at
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
[0x0000c] in <a66f207c1e5949e9a252c01e27bbd34e>:0 at
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess
(System.Threading.Tasks.Task task) [0x0004e] in
<a66f207c1e5949e9a252c01e27bbd34e>:0 at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification
(System.Threading.Tasks.Task task) [0x0002e] in
<a66f207c1e5949e9a252c01e27bbd34e>:0 at
System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd
(System.Threading.Tasks.Task task) [0x0000b] in
<a66f207c1e5949e9a252c01e27bbd34e>:0 at
System.Runtime.CompilerServices.ConfiguredTaskAwaitable
1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in :0 at System.Net.Http.HttpClient+c__async0.MoveNext () [0x000f3] in <566d6cf6576345098cb5e08ad43d5e78>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in :0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in :0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in :0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in :0 at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in :0 at MyAPP.Webservice+d__4.MoveNext () [0x000d0] in C:\MyProject\Classes\Webservice.cs:140 }



**还尝试过:SendAsync() Ty M. Wiśnicki **
public static async Task<bool> SaveRolAsync(MediwareLib.Methods Method, Role Rol)
{
try
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var uri = (BaseRequestUrl + "roles/");
HttpResponseMessage response = null;
var request = new HttpRequestMessage();

try
{
var jSettings = new JsonSerializerSettings();
jSettings.NullValueHandling = NullValueHandling.Ignore;
jSettings.MissingMemberHandling = MissingMemberHandling.Ignore;

var JsonData = JsonConvert.SerializeObject(Rol);

var RoleContent = new StringContent(JsonData, Encoding.UTF8, "application/json");

if (Method == MediwareLib.Methods.PUT || Method == MediwareLib.Methods.PATCH)
{
request = new HttpRequestMessage(HttpMethod.Put, uri);
request.Content = RoleContent;

response = await client.SendAsync(request,
HttpCompletionOption.ResponseHeadersRead);
}

if (Method == MediwareLib.Methods.POST)
{
request = new HttpRequestMessage(HttpMethod.Post, uri);
request.Content = RoleContent;

response = await client.SendAsync(request,
HttpCompletionOption.ResponseHeadersRead);
}

if (Method == MediwareLib.Methods.DELETE)
{
throw new NotImplementedException();
// response = await client.DeleteAsync(uri + Rol.Id);
}

return response.IsSuccessStatusCode;

}
catch (JsonException jse)
{
Globals.Log("SaveRolAsync: " + jse.ToString());
return false;
}
}
catch (Exception ex)
{
Globals.Log("SaveRolAsync: " + ex.ToString());
return false;
}

}

enter image description here

最佳答案

由于您使用的是 .Result.Waitawait这最终会导致 僵局在你的代码中。

您可以使用 ConfigureAwait(false)async 的方法防止死锁

像这样:

response = await client.PostAsync(uri, RoleContent).ConfigureAwait(false);

you can use ConfigureAwait(false) wherever possible for Don't Block Async Code .

关于c# - HttpClient PostAsync() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41282917/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com