Asp.net

處理 global.asax ASP.NET MVC 中的異常

  • September 26, 2012

我有擷取 Global.asax 中所有異常的程式碼

protected void Application_Error(object sender, EventArgs e) 
       {
           System.Web.HttpContext context = HttpContext.Current;
           System.Exception exc = context.Server.GetLastError();
           var ip = context.Request.ServerVariables["REMOTE_ADDR"];
           var url = context.Request.Url.ToString();
           var msg = exc.Message.ToString();
           var stack = exc.StackTrace.ToString();
       }

如何獲取發生此錯誤的控制器名稱

如何獲取請求客戶端 IP?

我可以過濾異常嗎?我不需要 404、504…. 錯誤

謝謝

Global.asax 沒有控制器和動作的概念,所以我相信沒有用於檢索控制器和動作名稱的 API。但是,您可以嘗試解析請求 URL:

HttpContextBase currentContext = new HttpContextWrapper(HttpContext.Current);
UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
RouteData routeData = urlHelper.RouteCollection.GetRouteData(currentContext);
string action = routeData.Values["action"] as string;
string controller = routeData.Values["controller"] as string;

要獲取使用者 IP,您可以使用UserHostAddress屬性:

string userIP = HttpContext.Current.Request.UserHostAddress;

要過濾掉你不打算處理的 HTTP 異常,你可以使用類似的東西:

HttpException httpException = exception as HttpException;
if (httpException != null)
{
   switch (httpException.GetHttpCode())
   {
       case 404:
       case 504:
           return;
   }
}

關於異常處理的最後一點評論 - 當有辦法在本地執行它時,在全域級別執行它不是最佳實踐。例如在 ASP.NET MVC 基Controller類中有一個方法:

protected virtual void OnException(ExceptionContext filterContext)

當被覆蓋時,它將讓您完全控制發生的異常。您可以在 Global.asax以及ASP.NET MVC 特定功能中獲得所有可用的資訊,例如對控制器的引用、視圖上下文、路由數據等。

引用自:https://stackoverflow.com/questions/12595789