【问题标题】:Intermittent Server cannot set status after HTTP headers have been sent发送 HTTP 标头后,间歇服务器无法设置状态
【发布时间】: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


    【解决方案1】:

    由于您使用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;
    

    以上代码取自以下链接并进行了改编: Put content in HttpResponseMessage objectAdd a custom response header in ApiController(关于 SO 的问答)

    【讨论】:

      猜你喜欢
      • 2014-01-27
      • 2011-01-23
      • 2015-11-07
      • 1970-01-01
      • 2016-08-27
      • 2015-06-24
      • 2015-05-16
      • 1970-01-01
      • 2012-09-28
      相关资源
      最近更新 更多