Iña*_*oro 9 c# asp.net asp.net-mvc razor asp.net-mvc-3
我已经尝试了一切,甚至卸载了asp.net mvc3,我无法让HandleError全局过滤器工作.
我在Global.asax中设置了HandleError过滤器:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
Run Code Online (Sandbox Code Playgroud)
我也启用了CustomErrors(如果我设置defaultRedirect ="Error"并不重要,我认为这是在文档中因为旧版本的mvc需要):
<customErrors mode="On" />
Run Code Online (Sandbox Code Playgroud)
尝试浏览页面直到错误被引发,你从localhost或使用主机名,在开发服务器或IIS 7.5中,它总是重定向到标准状态500页,而不是我自定义Error.cshtml视图,我已在共享中创建.这是错误视图代码:
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = "Oooops";
}
<h2>Ooops Something really bad happened!</h2>
Run Code Online (Sandbox Code Playgroud)
另外我注意到,如果我创建一个新的ASP.NET MVC3项目,然后选择"Internet Application"模板,并且只是在该项目中启用customErrors,那么HandleError过滤器开始正常工作,但是使用空的MVC3模板却没有.
我想澄清一下,确实我可以在调试时看到正在处理的错误视图,但浏览器始终显示错误500页面.
小智 18
要解决此问题,您需要做的就是编辑Error.cshtml页面并确保已正确设置Layout属性.在Empty MVC 3 Application中,它设置为NULL,这会导致HTTP 500内部服务器错误.
我通过简单地添加:修复了这个问题
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
小智 8
我遇到了同样的问题.我发现这篇文章: ASP.NET MVC中的500内部服务器错误并尝试取消选中"友好的Http错误"并且我的HandleErrors属性在IE 8中开始按预期工作,并且检查了IE 7兼容模式(并且默认情况下开始像在Chrome中一样工作).我不认为这是部署应用程序的有效解决方案,但也许有一种方法可以扩展HandleError属性,使其重定向到"错误"控制器,而不仅仅是默认的错误视图.
更新: 这篇文章显示,当返回HTTP状态500时,IE处理它很笨拙.解决它的方法是将状态设置为200,然后一切似乎都正常(即使在IE中).
public class CustomHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
//https://stackoverflow.com/questions/5137627/mvc-handleerror-returns-error-500-and-view-error-page
//https://stackoverflow.com/questions/183316/asp-net-mvc-handleerror
filterContext.HttpContext.Response.StatusCode = 200;
}
}
Run Code Online (Sandbox Code Playgroud)
嗯,这很好,终于找到了答案,这台机器安装了Internet Explorer 9 beta,并且在处理状态500时,在显示错误视图之前HandleError属性设置的行为有所不同.
我尝试过其他浏览器并且工作正常:
我现在不能取消的是为什么"互联网应用"模板正在运作.
谁知道我可以在哪里发布错误?应该去asp.net mvc团队还是IE 9团队?我该如何联系他们?
归档时间: |
|
查看次数: |
9492 次 |
最近记录: |