有时我会在我的生产环境中遇到异常:
网络信息
H144已通过身份验证: True
Stack trace: at System.Web.HttpResponse.set_StatusCode(Int32 value) at
System.Web.HttpResponseWrapper.set_StatusCode(Int32 value) at
System.Web.Mvc.HandleErrorAttribute.OnException(ExceptionContext filterContext) at
System.Web.Mvc.ControllerActionInvoker.InvokeExceptionFilters(ControllerContext controllerContext, IList(1) filters, Exception exception) at
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) at System.Web.Mvc.Controller.ExecuteCore() at
System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__4() at
System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0() at
System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8(1).<BeginSynchronous>b__7(IAsyncResult _) at
System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult(1).End() at
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) at
System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& ompletedSynchronously)
我在我的测试环境中没有注意到这个错误,我应该检查什么?
我正在使用ASP.NET MVC 2 (Release Candidate 2)
发布于 2010-05-24 01:03:55
我大体上同意Vagrant的观点:
我不同意Vagrant的是“在绑定中没有错误”的补救方法--你仍然可能在视图绑定中遇到运行时错误,例如空引用异常。
一种更好的解决方案是确保在将任何字节发送到响应流之前使用Response.BufferOutput = true;
。例如,在您的控制器操作或应用程序中的On_Begin_Request中。这使得服务器传输、cookies/标头等可以直接设置到自然结束响应或调用end/flush。
当然,还要检查buffer在堆栈中是否也没有被刷新/设置为false。
MSDN参考:HttpResponse.BufferOutput
发布于 2010-10-27 11:10:09
只是为了补充上面的回答。当我第一次开始使用ASP.Net MVC时,我遇到了同样的问题,我在控制器操作期间执行Response.Redirect:
Response.Redirect("/blah", true);
我应该返回一个RedirectAction
,而不是返回Response.Redirect
操作
return Redirect("/blah");
发布于 2010-05-20 01:36:25
在您指定错误或开始发送数据之前,HTTP服务器不会将响应头发送回客户端。如果您开始将数据发送回客户端,则服务器必须首先发送响应头(其中包含状态代码)。一旦发送了报头,显然就不能再在报头中放入状态代码。
这是一个常见的问题。启动页面,并发送一些初始标记(即<head>
)。然后,服务器在首先发送带有假定成功状态的HTTP响应头之后,将这些标记发送到客户端。现在,您开始处理页面的主要部分,并发现一个问题。此时不能发送错误,因为包含错误状态的响应头已经发送。
解决方案是这样的:在生成任何内容之前,检查是否会有任何错误。只有这样,当你确信不会有任何问题时,你才能开始发送内容,比如标签。
在您的示例中,您似乎有一个处理来自表单的POST请求的登录页面。您可能会抛出一些初始HTML,然后检查用户名和密码是否有效。相反,在生成任何HTML之前,您应该首先验证用户/密码。
https://stackoverflow.com/questions/2383169
复制相似问题