2016-09-21 54 views
1

我有這個麻煩,我不是爲什麼,它一定是我做錯了什麼。我必須重寫才能使其工作,但它聞起來都是錯誤的,但它的工作原理。WebApi - PostAsync

所以這是我第一次嘗試,並沒有工作,因爲被退回的500的StatusCode,但這是因爲它不是在等待響應,我需要等待

[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的,醜陋的,但任何人都可以告訴我,告訴我什麼,我做錯了什麼?

+2

請格式化代碼! –

+0

什麼是'booking.PostAsync'?你爲什麼不直接去那裏? –

+1

我發現當第一個代碼不工作時,第二塊代碼不太可能工作。你確定?響應狀態代碼在一段時間後不會改變。 HTTP協議無法「更新」已發送的響應。所有這些計時的東西什麼都不做 – usr

回答

1

服務器有一個時間相關的錯誤。當你使用調試器給它足夠的時間來避免崩潰時,它會消失。

異步模塊或處理程序完成,而異步操作仍然懸而未決

看起來像是與異步。

客戶端沒有錯,while (response.StatusCode ==HttpStatusCode.InternalServerError)循環什麼都不做。它甚至不會改變服務器的時間。你對調試器的使用可能是這樣做的,這兩種效果在你的解釋中混淆了。

修復服務器,現在你知道去哪裏看。

+0

嗨,我已縮小到發送電子郵件(電子郵件實際發送,調試時沒有錯誤)public bool SendMail(string from,string to,string subject,string body,bool html) {...}有什麼想法? –

+0

那麼,嚴格來說,問題是解決的,因爲客戶端問題得到解決(它不存在)。最好的行動方式是提出有關服務器崩潰細節的問題。但看起來你正在開始一些異步操作,而不是等待完成。這就是信息所說的。因此,審覈這種事情的代碼。任何名稱中的「異步」都很有趣。 – usr