我已经尝试了一切,甚至卸载了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页面.
我是第一次同时处理ASP.NET,MVC 3,Web开发.请耐心等待,因为我知道这个问题已经从不同角度进行了大量讨论.我仍然没有找到我的具体问题的答案:为什么我的应用程序在404发生时找不到我的Error.cshtml文件,当它发现它与其他错误一样好的时候?
(环境:Win 7 64位,IIS7,SQL 2008 Express,VS2010,ASP.NET 4,MVC3,EF v4)
我有一个控制器WorkerController.cs,它正确地从数据库读取和写入.如果我更改数据库名称而不更新我的DbContext,它会给我一个错误.当我将web.config更改为始终显示自定义错误时,显示/Views/Shared/Error.cshtml文件.
我没有 FooController.cs文件.如果我去/ Foo,我会得到404错误,正如预期的那样.它告诉我它找不到资源/ Foo.
当我设置customErrors mode ="On"并向/ Foo发出http请求时,我收到404错误,指出无法找到/Error.cshtml.
我正在搜索和阅读讨论使用指定控制器处理错误的各种方法的帖子,但我真的想知道我错过了什么.为什么它会找到其他错误的/Error.cshtml,而不是404错误?
我设计了一个控制器ErrorController
,使用类似Forbidden
or 的方法调用NotFound
,因此我可以将以下几行添加到 Web.config 中:
<customErrors mode="On" defaultRedirect="~/Error/Unknown" />
<error statusCode="404" redirect="~/Error/NotFound" />
<error statusCode="403" redirect="~/Error/Forbidden" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
所以现在我希望能够做这样的事情:
public ActionResult Edit(int idObject)
{
if( user.OnwsObject(idObject) )
{
// lets edit
}
else
{
// ** SEND AN ERROR 403 ***
// And let ASP.NET MVC with IIS manage that error to send
// the requester to the Web.config defined error page.
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我尝试过类似的事情:(A)throw new HttpException(403, "Error description");
:导致导致系统崩溃的未处理异常,(B)return HttpStatusResultCode(403, "Error description") …
我正在使用VSC10的MVC 3并试图让[HandleError]工作.我在控制器中创建了一个测试来模拟崩溃,如下所示:
[HandleError]
public ActionResult Crash()
{
throw new ApplicationException();
}
Run Code Online (Sandbox Code Playgroud)
还进入了web.config并添加了:
<customErrors mode="on" />
Run Code Online (Sandbox Code Playgroud)
如果我从Chrome运行,MVC将返回Shared/Error.aspx中的视图,因此这项工作正常.
如果我从IE 8运行,我得到它友好的错误页面("网站无法显示页面,最有可能的原因:......你可以尝试......").我进入IE工具并关闭"显示友好的HTTP错误消息"并再次运行,IE显示我的Error.aspx视图.显然我无法让用户更改此设置,但至少我知道我的Error.aspx正在返回.
所以我运行Fiddler,当我使浏览器转到我的Crash方法时,它显示即使MVC返回我的Error.aspx视图,它也会返回500结果.这会导致IE认为它有错误并使用友好页面覆盖我的页面.
我认为MVC应该返回结果200与我的Error.aspx页面而不是500.任何人都可以给我一些关于尝试什么的想法?
如何从中重定向到另一个页面 Application_Error
?
目前我正在做
Response.Redirect("~/Account/LogOn");
Run Code Online (Sandbox Code Playgroud)
但我想做点什么 RedirectToAction()
我的基本控制器类上有以下内容,我的其他控制器继承自:
[HandleError(ExceptionType = typeof(NotFoundException), View = "NotFound")]
[HandleError(ExceptionType = typeof(UnauthorisedException), View = "Unauthorised")]
Run Code Online (Sandbox Code Playgroud)
我希望能够将异常消息添加到视图中.例如,当我抛出异常时:
throw new NotFoundException("This record was not found");
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式获取此消息并将其插入NotFound视图.
1-有时我的SQL Server因维护而停机,所以当我尝试运行我的ASP.NET MVC应用程序时,我遇到错误的黄色错误屏幕 network-related or instance-specific error occurred while establishing a connection to SQL Server.
由于我不知道ASP.NET MVC中的事件序列,我想知道应该在哪里检查连接,因此我可以将用户重定向到一个视图,通知他/她这种情况(而不是显示此错误页面).我在asp.net论坛上看到了这个答案,但我无法理解如何在里面处理这个问题global.asax
.
2-是否可以对每个数据库连接错误进行一些更改,我可以将用户重定向到该信息页面?我的意思是可以为数据库连接错误定义全局异常处理程序吗?
PS我在web.config中的connectionString被命名DefaultConnection
.