Intermittent Server не может установить статус после отправки заголовков HTTP - PullRequest
0 голосов
/ 28 февраля 2019

В журналах событий периодически появляется ошибка «Сервер не может установить состояние после отправки заголовков HTTP».Сайт webapi работает нормально и выдает правильный вывод, даже когда это происходит.

Информация об исключении: Тип исключения: HttpException Сообщение об исключении: Сервер не может установить статус после отправки заголовков HTTP.в System.Web.HttpResponse.set_StatusCode (значение Int32) в System.Web.HttpResponseWrapper.set_StatusCode (значение Int32) в System.Web.Http.WebHost.HttpControllerHandler.d__25.MoveNext () - конец трассировки стекагде было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в System.Web.Http.Hhttp_HHTLHHTLHH.HerHler.HostlerHHTLHHTLHHTORH.HerHerHH.HerHHTLHHTHLHHTHHHTHHTHHHTH.HTHTHHHT.) --- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в System.Web.Http.WebHost.HttpControllerHandler.d__12.MoveNext () --- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (целевая задача) при System.Web.TaskAsyncHelper.EndTask (IAsyncResult ар) при System.Web.HttpTaskAsyncHandler.System.Web.IHttpAsyncHandler.EndProcessRequest (IAsyncResult результат) в System.Web.HttpApplication.CallHandlerExecutionStep.InvokeEndHandler (IAsyncResult ar) в System.Web.HttpApplication.CallHandlerExecutionStep.OnAsyncHandlerCompletion (IAsyncResult ar)

Объект ответа обрабатывается напрямую (формат json не известен до времени выполнения) следующим образом.

var response= HttpContext.Current.Response;
response.StatusCode = (int) HttpStatusCode.OK;
response.Headers.Add("X-Robots-Tag", "noindex, nofollow");
response.Write("Some json");
response.Flush();
response.End();

response.End требуется, я не понимаю, почему, если эта строка пропущена, возникает аналогичная ошибка.

Почему это происходит, и есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 01 марта 2019

Поскольку вы отметили свой вопрос как asp.net-web-api, я предполагаю, что вы используете этот код в методе контроллера API.Если это так, я предлагаю вернуть неизвестный Json следующим образом:

var response = new HttpResponseMessage(HttpStatusCode.OK) 
{
    Content =  new StringContent("Some json", System.Text.Encoding.UTF8, "application/json") 
};
response.Headers.Add("X-Robots-Tag", "noindex, nofollow");
return response;

Приведенный выше код был взят из следующих ссылок и адаптирован: Поместить содержимое в объект HttpResponseMessage и Добавить пользовательскийзаголовок ответа в ApiController (вопросы и ответы по SO)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...