Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# mvc6中的全局错误处理_C#_Asp.net Mvc_Asp.net Core - Fatal编程技术网

C# mvc6中的全局错误处理

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;

在我的MVC 5应用程序中,未处理的异常在全局
应用程序\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错误。