我正在尝试使用ELMAH来记录我的ASP.NET MVC应用程序中的错误,但是当我在控制器上使用[HandleError]属性时,ELMAH在发生错误时不会记录任何错误.
正如我猜测它,因为ELMAH只记录未处理的错误,[HandleError]属性正在处理错误,因此无需记录它.
我如何修改或如何修改属性,以便ELMAH可以知道有错误并记录它..
编辑:让我确保每个人都理解,我知道我可以修改那个不是我问的问题的属性... ELMAH在使用handleerror属性时会被绕过,这意味着它不会看到有错误因为它被处理了已经由属性...我要问的是有一种方法让ELMAH看到错误并记录它即使属性处理它...我搜索周围,没有看到任何方法调用强制它来记录错误....
我正在使用全局操作过滤器来处理和记录所有异常.
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ElmahHandleErrorAttribute());
filters.Add(new HandleErrorAttribute());
}
Run Code Online (Sandbox Code Playgroud)
这是全局动作过滤器ElmahHandleErrorAttribute的定义方式 - 它会覆盖该OnException方法.
public class ElmahHandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
//Is the exception handled already? context.ExceptionHandled seems to be true here
if (!context.IsChildAction && (context.HttpContext.IsCustomErrorEnabled))
{
//Do other stuff stuff
//Log to Elmah
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么方法执行context.ExceptionHandled时值为true OnException.如何处理此异常?
-EDIT-
我有一customErrors节Web.Config.我有一个ErrorController班级和行动叫做General和Http404.
<customErrors mode ="On" defaultRedirect="Error/General">
<error …Run Code Online (Sandbox Code Playgroud) asp.net-mvc exception-handling custom-error-pages asp.net-mvc-3
我在 ASP.NET MVC Framework 应用程序的处理程序中收到了一些“一般”错误protected void Application_Error()。异常消息是:
\n\n从客户端检测到潜在危险的 Request.Form 值
\n
有很多方法可以触发此操作;仅一个例子是拨打电话,例如
\nhttp:/www.mywebsite.com/http:/www.mywebsite.com/\nRun Code Online (Sandbox Code Playgroud)\n我想仅为这种异常创建一个“过滤器”,并相应地重定向或管理请求。我不想禁用它,只是想管理它。我也不希望它落入通用protected void Application_Error()处理程序\xe2\x80\x94 中,或者至少,我想在该方法内部管理它,这样它就不会被我的日志记录等处理。
我该如何处理这个问题?
\n在与RegisterGlobalFilters和HandleErrorAttribute永远斗争之后,我决定回到原点.我使用模板在VS10中创建了一个新的MVC 3项目.在About-action中添加一个抛出DivideByZeroException并启动dev服务器.预计不会看到黄色的屏幕.
但我做到了.
为什么这对我不起作用?
更新
archil和Adam Tuliper的建议有点奏效.调用了Error视图.
然后我继续在RegisterGlobalFilters中添加它.
filters.Add(new HandleErrorAttribute { ExceptionType = typeof(DivideByZeroException), View = "DivideByZeroException", Order = 1 });
filters.Add(new HandleErrorAttribute { View = "AllOtherExceptions", Order = 2 });
Run Code Online (Sandbox Code Playgroud)
调用了AllOtherExceptions视图.为什么不是DivideByZeroException视图?
后续问题已在此处发布.