ASP.NET MVC HandleError

ASP.NET MVC HandleError

我如何[HandleError]在asp.net MVC Preview 5中进行过滤?
我在我的Web.config文件中设置了customErrors

<customErrors mode="On" defaultRedirect="Error.aspx">
  <error statusCode="403" redirect="NoAccess.htm"/>
  <error statusCode="404" redirect="FileNotFound.htm"/></customErrors>

并将[HandleError]放在我的Controller类上面,如下所示:

[HandleError]public class DSWebsiteController: Controller{
    [snip]
    public ActionResult CrashTest()
    {
        throw new Exception("Oh Noes!");
    }}

然后我让我的控制器从这个类继承并在它们上调用CrashTest()。视觉工作室在错误时停止,按f5继续后,我被重新路由到Error.aspx?aspxerrorpath = / sxi.mvc / CrashTest(其中sxi是使用过的控制器的名称。当然道路无法找到,我得到“'''应用程序中的服务器错误。”404。

这个站点从预览3移植到5.除了错误处理之外,所有东西都运行(没有太多工作要移植)。当我创建一个完整的新项目时,错误处理似乎有效。

想法?

- 注意 -
由于这个问题现在有超过3K的视图,我认为放入我目前使用的(ASP.NET MVC 1.0)是有益的。在mvc contrib项目中有一个名为“RescueAttribute”的出色属性你也应该检查一下;)


小怪兽爱吃肉
浏览 428回答 3
3回答

牧羊人nacy

[HandleError]当你只为你的类提供HandleError属性时(或者你的动作方法),当发生未处理的异常时,MVC将首先在Controller的View文件夹中查找名为“Error”的相应视图。如果它找不到它,那么它将继续查看共享视图文件夹(默认情况下应该包含一个Error.aspx文件)[HandleError(ExceptionType&nbsp;=&nbsp;typeof(SqlException),&nbsp;View&nbsp;=&nbsp;"DatabaseError")][HandleError(ExceptionType&nbsp;=&nbsp;typeof(NullReferenceException),&nbsp;View&nbsp;=&nbsp;"LameErrorHandling")]您还可以使用有关所查找的异常类型的特定信息来堆叠其他属性。此时,您可以将错误定向到默认“错误”视图以外的特定视图。有关更多信息,请查看Scott Guthrie关于它的博客文章。

红颜莎娜

&nbsp;[HandleError] &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;ErrorController&nbsp;:&nbsp;Controller &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[AcceptVerbs(HttpVerbs.Get)] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ViewResult&nbsp;NotAuthorized() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//401 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.StatusCode&nbsp;=&nbsp;(int)HttpStatusCode.Unauthorized; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;View(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;[AcceptVerbs(HttpVerbs.Get)] &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ViewResult&nbsp;Forbidden() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//403 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.StatusCode&nbsp;=&nbsp;(int)HttpStatusCode.Forbidden; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;View(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;[AcceptVerbs(HttpVerbs.Get)] &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ViewResult&nbsp;NotFound() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//404 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.StatusCode&nbsp;=&nbsp;(int)HttpStatusCode.NotFound; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;View(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ViewResult&nbsp;ServerError() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//500 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.StatusCode&nbsp;=&nbsp;(int)HttpStatusCode.NotFound; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;View(); &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP