首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC HandleError

ASP.NET MVC HandleError
EN

Stack Overflow用户
提问于 2008-10-08 15:12:33
回答 6查看 101.1K关注 0票数 111

如何在asp.net MVCPreview5中使用[HandleError]过滤器?

我在Web.config文件中设置了customErrors

代码语言:javascript
复制
<customErrors mode="On" defaultRedirect="Error.aspx">
  <error statusCode="403" redirect="NoAccess.htm"/>
  <error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>

将HandleError放在我的控制器类上面,如下所示:

代码语言:javascript
复制
[HandleError]
public class DSWebsiteController: Controller
{
    [snip]
    public ActionResult CrashTest()
    {
        throw new Exception("Oh Noes!");
    }
}

然后,我让我的控制器继承这个类,并对它们调用CrashTest()。Visual studio在出现错误时停止,并且在按f5继续后,我被重新路由到Error.aspx?aspxerrorpath=/sxi.mvc/CrashTest (其中sxi是所用控制器的名称。当然,无法找到路径,我得到"Server Error in '/‘Application.“404。

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

想法?

--注--

由于这个问题现在有超过3K的浏览量,我想把我目前正在使用的(ASP.NET MVC1.0)放进去会很有好处。在mvc contrib project中有一个名为"RescueAttribute“的出色属性,您可能也应该检查一下它;)

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-10-10 17:29:43

代码语言:javascript
复制
[HandleError]

当你只给你的类(或者你的操作方法)提供HandleError属性时,当一个未处理的异常发生时,MVC将首先在控制器的视图文件夹中查找名为"Error“的对应视图。如果它在那里找不到它,那么它将继续在共享视图文件夹中查找(默认情况下其中应该有一个Error.aspx文件)

代码语言:javascript
复制
[HandleError(ExceptionType = typeof(SqlException), View = "DatabaseError")]
[HandleError(ExceptionType = typeof(NullReferenceException), View = "LameErrorHandling")]

您还可以使用有关正在查找的异常类型的特定信息来堆叠其他属性。此时,您可以将错误定向到默认" Error“视图以外的特定视图。

有关更多信息,请查看Scott Guthrie's blog post

票数 158
EN

Stack Overflow用户

发布于 2009-07-22 10:38:08

还应注意,未将http错误代码设置为500的错误

(例如UnauthorizedAccessException)

将不会由HandleError筛选器处理。

票数 25
EN

Stack Overflow用户

发布于 2010-05-05 06:12:19

http错误代码为500的解决方案这是一个名为error的属性,将其放在操作上

代码语言:javascript
复制
public class Error: System.Web.Mvc.HandleErrorAttribute
{
    public override void OnException(System.Web.Mvc.ExceptionContext filterContext)
    {

            if (filterContext.HttpContext.IsCustomErrorEnabled)
            {
                filterContext.ExceptionHandled = true;

            }
            base.OnException(filterContext);
            //OVERRIDE THE 500 ERROR  
           filterContext.HttpContext.Response.StatusCode = 200;
    }

    private static void RaiseErrorSignal(Exception e)
    {
        var context = HttpContext.Current;
      // using.Elmah.ErrorSignal.FromContext(context).Raise(e, context);
    } 

}

//示例:

代码语言:javascript
复制
[Error]
[HandleError]
[PopulateSiteMap(SiteMapName="Mifel1", ViewDataKey="Mifel1")]
public class ApplicationController : Controller
{
}
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/183316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档