2016-09-21 2 views
1

У меня возникли проблемы с этим, я не думаю, что это должно быть что-то, что я делаю неправильно. Я должен был переписать, чтобы заставить его работать, но он пахнет не так, но это работает.WebApi - PostAsync

Так это то, что я пытался первым, и он не работает, так как вернули StatusCode 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, некрасиво, но может кто-нибудь сказать мне и показать мне, что я делаю неправильно?

+2

Пожалуйста, отформатируйте код! –

+0

Что такое 'booking.PostAsync'? Почему бы вам прямо не пойти туда? –

+1

Мне кажется маловероятным, что вторая часть кода работает, когда первая не работает. Ты уверен? Код состояния ответа не изменяется через некоторое время. Протокол HTTP не имеет возможности «обновлять» ответ, который был отправлен. Все эти моменты времени ничего не делают. – usr

ответ

1

На сервере имеется ошибка, зависящая от времени. Он уходит, когда вы используете отладчик, чтобы дать ему достаточно времени, чтобы избежать сбоя.

асинхронный модуль или обработчик завершения в то время как асинхронная операция еще продолжается

Похоже, что-то с асинхронным.

Клиент не виноват, а петля while (response.StatusCode ==HttpStatusCode.InternalServerError) ничего не делает. Он даже не меняет время на сервере. Возможно, ваше использование отладчика сделало это, и два эффекта были сбиты с толку в вашей интерпретации.

Исправьте сервер, теперь, когда вы знаете, где искать.

+0

Привет, Ive сузил его до отправки электронной почты (письмо действительно отправляет , ошибка отбрасывается при отладке) public bool SendMail (строка from, string to, string subject, string body, bool html) {...} любые идеи? –

+0

Ну, строго говоря, вопрос решается, потому что проблема с клиентской стороной решена (ее не существует). Лучшим способом действий было бы задать вопрос с подробностями о сбое сервера. Но похоже, что вы начинаете какое-то асинхронное действие и не дожидаетесь завершения. Вот что говорится в сообщении. Так что проверяйте код для такой вещи. Интересно что-нибудь с «асинксом» от его имени. – usr

Смежные вопросы