如何在asp.net MVCPreview5中使用[HandleError]
过滤器?
我在Web.config文件中设置了customErrors
<customErrors mode="On" defaultRedirect="Error.aspx">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
将HandleError放在我的控制器类上面,如下所示:
[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“的出色属性,您可能也应该检查一下它;)
发布于 2008-10-10 17:29:43
[HandleError]
当你只给你的类(或者你的操作方法)提供HandleError属性时,当一个未处理的异常发生时,MVC将首先在控制器的视图文件夹中查找名为"Error“的对应视图。如果它在那里找不到它,那么它将继续在共享视图文件夹中查找(默认情况下其中应该有一个Error.aspx文件)
[HandleError(ExceptionType = typeof(SqlException), View = "DatabaseError")]
[HandleError(ExceptionType = typeof(NullReferenceException), View = "LameErrorHandling")]
您还可以使用有关正在查找的异常类型的特定信息来堆叠其他属性。此时,您可以将错误定向到默认" Error“视图以外的特定视图。
有关更多信息,请查看Scott Guthrie's blog post。
发布于 2009-07-22 10:38:08
还应注意,未将http错误代码设置为500的错误
(例如UnauthorizedAccessException)
将不会由HandleError筛选器处理。
发布于 2010-05-05 06:12:19
http错误代码为500的解决方案这是一个名为error的属性,将其放在操作上
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);
}
}
//示例:
[Error]
[HandleError]
[PopulateSiteMap(SiteMapName="Mifel1", ViewDataKey="Mifel1")]
public class ApplicationController : Controller
{
}
https://stackoverflow.com/questions/183316
复制相似问题