Asp.net
處理 global.asax ASP.NET MVC 中的異常
我有擷取 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 特定功能中獲得所有可用的資訊,例如對控制器的引用、視圖上下文、路由數據等。