C# mvc6中的全局错误处理
在我的MVC 5应用程序中,未处理的异常在全局C# mvc6中的全局错误处理,c#,asp.net-mvc,asp.net-core,C#,Asp.net Mvc,Asp.net Core,在我的MVC 5应用程序中,未处理的异常在全局应用程序\u错误事件中被捕获,然后重定向到错误控制器 最后一个错误添加到全局.error事件中的HttpApplicationState,并在控制器中检索 MVC6没有全局文件。它使用IEExceptionFilter捕获未处理的异常 public class GlobalExceptionFilter : IExceptionFilter, IDisposable { private readonly ILogger logger;
应用程序\u错误
事件中被捕获,然后重定向到错误控制器
最后一个错误添加到全局.error事件中的HttpApplicationState
,并在控制器中检索
MVC6没有全局文件。它使用IEExceptionFilter
捕获未处理的异常
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;
}
}
是否可以在asp.net核心文档中的OneException中执行相同操作(检查) 通常,过滤器用于处理交叉业务和 应用程序关注点。对于中间件来说,这通常是相同的用例。 过滤器在功能上与中间件非常相似,但让您 确定该行为的范围,并将其插入应用程序中的某个位置 有意义,例如在视图之前或模型绑定之后。过滤器 是MVC的一部分,可以访问其上下文和构造。对于 实例中,中间件无法轻松检测模型验证是否在 请求已生成错误,并相应地响应,但筛选器 我们可以很容易地做到这一点 基于此文档的解释。中间件方法和过滤器方法都将满足您的要求。如果您需要有关MVC管道及其错误信息的更多信息,则应使用筛选方法。另一种方法:然后使用内置的
IAApplicationBuilder。使用ExceptionHandler
处理重定向。中间件的一个优点是,它还可以捕获Razor错误。