[英]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.