我有一个全球性的异常过滤器命名为LogErrorAttribute
:无论是全球的异常过滤器或Application_Error事件被捕获未处理的异常
public class LogErrorAttribute : IExceptionFilter
{
private ILogUtils logUtils;
public void OnException(ExceptionContext filterContext)
{
if (this.logUtils == null)
{
this.logUtils = StructureMapConfig.Container.GetInstance<ILogUtils>();
}
this.logUtils.LogError(HttpContext.Current.User.Identity.GetUserId(), "Unknown error.", filterContext.Exception);
}
}
它与标准HandleErrorAttribute
过滤器一起注册:
filters.Add(new LogErrorAttribute());
filters.Add(new HandleErrorAttribute());
我注册像这样的过滤器:
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
我也有一个Application_Error
回退:
protected void Application_Error()
{
var exception = Server.GetLastError();
Server.ClearError();
var httpException = exception as HttpException;
//Logging goes here
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
routeData.Values["action"] = "Index";
if (httpException != null)
{
if (httpException.GetHttpCode() == 404)
{
routeData.Values["action"] = "NotFound";
}
Response.StatusCode = httpException.GetHttpCode();
}
else
{
Response.StatusCode = 500;
}
// Avoid IIS7 getting involved
Response.TrySkipIisCustomErrors = true;
// Execute the error controller
if (exception != null)
{
this.errorLogger.Log(LogLevel.Error, "An unknown exception has occurred.", exception);
}
else if (httpException != null)
{
this.errorLogger.Log(LogLevel.Error, "An unknown HTTP exception has occurred.", httpException);
}
else
{
this.errorLogger.Log(LogLevel.Error, "An unknown error has occurred.");
}
}
现在,我有一个从数据库中抓取一些数据的API控制器,然后使用AutoMapper
到模型映射到视图模型:
var viewModels = AutoMapper.Mapper.Map(users, new List<UserViewModel>());
内部的AutoMapper
配置自定义解析执行的属性之一:
var appModuleAssignments = this.appModuleAssignmentManager.Get(userId);
var appModules = appModuleAssignments.Select(x => this.appModuleManager.Get(x.AppModuleId));
return AutoMapper.Mapper.Map(appModules, new List<AppModuleViewModel>());
目前我正在迫使appModuleManager.Get
声明抛出一个异常规则:
throw new Exception("Testing global filter.");
这随后抛出异常的AutoMapper
,这两者都是未处理的,但无论是全球过滤器或Application_Error
领了这个例外。
我在这里做错了什么?
有两件事情我已经做了,因为发帖:
- 添加了
customErrors
属性为Web.config
把他们on
。 - 删除了
HandleErrorAttribute
全局过滤器,因为我意识到它设置了错误处理,如果它甚至运行。我不希望它执行任何操作,因为这个错误发生在控制器外面,但是它稍后可能会咬我。
我讨厌成为“那家伙”,但你有没有试过清理(删除)bin和obj文件夹,然后清除网页浏览器缓存?似乎你正在做的一切正常(从最初的一瞥) – Pseudonym
@别名我完全理解,但是,我一直在那条路上。 –
好吧,我将不得不仔细阅读你的问题 – Pseudonym