一、异常片段
System.Web.HttpException (0x80004005): 服务器无法在已发送 HTTP 标头之后设置状态。
在 System.Web.HttpResponse.set_StatusCode(Int32 value)
在 System.Web.Http.WebHost.HttpControllerHandler.<CopyResponseStatusAndHeadersAsync>d__25.MoveNext()
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 System.Web.Http.WebHost.HttpControllerHandler.<CopyResponseAsync>d__15.MoveNext()
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 System.Web.Http.WebHost.HttpControllerHandler.<ProcessRequestAsyncCore>d__12.MoveNext()
--- 引发异常的上一位置中堆栈跟踪的末尾 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar)
在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
在 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
二、网上常规解决办法
输出之前加clear()和BufferOutput两个属性。但是实际未解决
HttpContext.Current.Response.Clear();//这里是关键,清除在返回前已经设置好的标头信息,这样后面的跳转才不会报错
HttpContext.Current.Response.BufferOutput = true;//设置输出缓冲
HttpContext.Current.Response.Write(responseContent);
HttpContext.Current.Response.End();
三、webapi正确处理方式
[HttpGet]
[HttpPost]
public HttpResponseMessage HelloWorld()
{
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent("输出内容", System.Text.Encoding.UTF8, "text/plain");
return resp;
}