【发布时间】:2016-10-06 06:29:29
【问题描述】:
在我的 MVC 5 应用程序中,未处理的异常在全局 Application_Error 事件中被捕获,然后重定向到 ErrorController。
最后一个错误在 Global.Error 事件中添加到 HttpApplicationState 并在 Controller 中检索。
MVC 6 没有全局文件。它使用IExceptionFilter 来捕获未处理的异常。
public class GlobalExceptionFilter : IExceptionFilter, IDisposable {
private readonly ILogger logger;
private bool _disposed;
public GlobalExceptionFilter(ILoggerFactory logger) {
if (logger == null) {
throw new ArgumentNullException(nameof(logger));
}
this.logger = logger.CreateLogger("Global Exception Filter");
}
public void OnException(ExceptionContext context) {
logger.LogError("GlobalExceptionFilter", context.Exception);
//redirect to controller
}
public void Dispose() {
if (this._disposed) {
return;
}
this._disposed = true;
}
private static int GetHttpStatusCode(Exception ex) {
if (ex is HttpResponseException) {
return (int)(ex as HttpResponseException).HttpStatusCode;
}
return (int)HttpStatusCode.InternalServerError;
}
}
是否可以在OnException 中做同样的事情?
【问题讨论】:
-
另一种方法:create an exception logging middleware 然后使用内置的
IApplicationBuilder.UseExceptionHandler来处理重定向。中间件的一个好处是它还可以捕获 Razor 错误。
标签: c# asp.net-mvc asp.net-core