【发布时间】:2019-07-22 12:30:36
【问题描述】:
我在事件日志中收到间歇性错误“发送 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.WebHost.HttpControllerHandler.d__15.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 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 ar) 在 System.Web.HttpTaskAsyncHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult 结果)在 System.Web.HttpApplication.CallHandlerExecutionStep.InvokeEndHandler(IAsyncResult 一只老鼠 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 是必填项,不明白为什么,漏掉这一行也会出现类似的错误。
为什么会发生这种情况,有没有更好的方法?
【问题讨论】:
标签: asp.net-web-api