WebApi - PostAsync

时间:2016-09-21 11:01:09

标签: asp.net-web-api async-await

我遇到了麻烦,我不知道为什么,它一定是我做错了。我不得不重写以使其正常工作,但它闻起来有点不对劲,但它确实有效。

所以这是我首先尝试的,它不起作用,因为返回了500的状态代码,但这是因为它没有等待响应,我需要它等待

[HttpPost]
public async Task<JsonResult> Booking(string model)
{
    //do some bits.
    var a = new JavaScriptSerializer().Serialize(e);
    var booking = new HttpClient();
    HttpContent content = new StringContent(a,Encoding.UTF8);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    HttpResponseMessage response = await booking.PostAsync("https://webapi.domain.com/Booking/Post", content);
    var aa = response.StatusCode //500 Internal Error
}

所以我重写了

[HttpPost]
public async Task<JsonResult> Booking(string model)
{
    //do some bits.
    var a = new JavaScriptSerializer().Serialize(e);
    var booking = new HttpClient();
    HttpContent content = new StringContent(a,Encoding.UTF8);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    HttpResponseMessage response = await booking.PostAsync("https://webapi.domain.com/Booking/Post", content);
    var t = new Stopwatch();

    while (response.StatusCode ==HttpStatusCode.InternalServerError)
    {
        t.Start();
        var zzzz = response.ReasonPhrase;
        if (t.ElapsedMilliseconds >10000)
        {
            response.StatusCode = HttpStatusCode.RequestTimeout;
            t.Stop();
        }
    }
    var aa = response.StatusCode //201 Created
}

这样可以让我回到201岁,丑陋,但是有谁能告诉我并告诉我我做错了什么?

1 个答案:

答案 0 :(得分:1)

服务器有一个与时间相关的错误。当你使用调试器给它足够的时间来避免崩溃时,它就会消失。

  

在异步操作仍处于挂起状态时完成异步模块或处理程序

看起来像是异步的东西。

客户端没有错,while (response.StatusCode ==HttpStatusCode.InternalServerError)循环没有任何作用。它甚至不会改变服务器的时间。您对调试器的使用可能就是这样做的,这两种效果在您的解释中是混淆的。

修复服务器,现在您知道要查找的位置。