簡體   English   中英

MVC 6 中的全局錯誤處理

[英]Global Error Handling in MVC 6

在我的 MVC 5 應用程序中,未處理的異常在 Global 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做同樣的事情?

來自 asp.net 核心文檔( 在這里查看

通常,過濾器旨在處理跨領域的業務和應用程序問題。 這通常是中間件的相同用例。 過濾器在功能上與中間件非常相似,但允許您確定該行為的范圍並將其插入應用程序中有意義的位置,例如視圖之前或模型綁定之后。 過濾器是 MVC 的一部分,可以訪問其上下文和構造。 例如,中間件無法輕松檢測請求的模型驗證是否產生錯誤並做出相應響應,但過濾器可以輕松做到這一點。

基於對本文檔的解釋。 中間件方法和過濾器方法都將滿足您的要求。 如果您需要更多 MVC 管道的信息及其錯誤信息,您應該使用過濾器方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM