gpt4 book ai didi

C# HttpClient PostAsync 将 204 变成 404

转载 作者:可可西里 更新时间:2023-11-01 08:47:21 26 4
gpt4 key购买 nike

鉴于此 WebApi 服务:

[ActionName("KillPerson")]
[HttpPost]
public void KillPerson([FromBody] long id)
{
// Kill
}

这个 HttpClient PostAsync 调用:

var httpClient = new HttpClient { BaseAddress = new Uri(ClientConfiguration.ApiUrl) };
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var serializerSettings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
Formatting = Formatting.Indented,
ReferenceLoopHandling = ReferenceLoopHandling.Serialize
};
var serializedParameter = JsonConvert.SerializeObject(parameter, serializerSettings);
var httpContent = new StringContent(serializedParameter, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync(serviceUrl, httpContent).ConfigureAwait(false);
response.EnsureSuccessStatusCode();

我期望 response.EnsureSuccessStatusCode();成功,但它会抛出 404。有趣的是,fiddler 告诉 med,webapi 服务按预期返回 204,当我调试它时,KillPerson 运行没有问题。

更新:我已经确定只有当客户端代码位于 PCL 或 Silverlight 5 项目中时才会发生这种情况。如果我在 Windows 窗体应用程序中复制它,完全相同的代码将给出预期的 204。如果我将 Windows 窗体应用指向 PCL 中包含的客户端代码,它会再次返回 404。

更新2:这解决了问题(尽管我应该需要这样做让我无休止地困扰):

[ActionName("KillPerson")]
[HttpPost]
public HttpResponseMessage KillPerson([FromBody] long id)
{
return this.Request.CreateResponse(HttpStatusCode.OK);
}

这重新引入了 404(fiddler 仍然说 204,非 silverlight 客户端运行良好)

[ActionName("KillPerson")]
[HttpPost]
public HttpResponseMessage KillPerson([FromBody] long id)
{
return this.Request.CreateResponse(HttpStatusCode.NoContent);
}

更新 3(已解决):终于想通了。似乎您可以选择在 Silverlight 中使用浏览器或客户端 HTTP 处理。当使用浏览器 HTTP 处理时,很多东西是不受支持的——包括各种响应代码和 header 。在调用 HttpClient 修复它之前添加这些行:

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);

最佳答案

终于明白了。似乎您可以选择在 Silverlight 中使用浏览器或客户端 HTTP 处理。当使用浏览器 HTTP 处理时,很多东西是不受支持的——包括各种响应代码和 header 。在调用 HttpClient 修复它之前添加这些行:

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);

关于C# HttpClient PostAsync 将 204 变成 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21184156/

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