How to prevent “aspxerrorpath” being passed as a query string to ASP.NET custom error pages

后端 未结 11 891
夕颜
夕颜 2020-12-29 03:36

In my ASP.NET web application, I have defined custom error pages in my web.config file as follows:



        
11条回答
  •  情深已故
    2020-12-29 03:55

    In my case, i prefer not use Web.config. Then i created code above in Global.asax file:

    protected void Application_Error(object sender, EventArgs e)
        {
            Exception ex = Server.GetLastError();
    
            //Not Found (When user digit unexisting url)
            if(ex is HttpException && ((HttpException)ex).GetHttpCode() == 404)
            {
                HttpContextWrapper contextWrapper = new HttpContextWrapper(this.Context);
    
                RouteData routeData = new RouteData();
                routeData.Values.Add("controller", "Error");
                routeData.Values.Add("action", "NotFound");
    
                IController controller = new ErrorController();
                RequestContext requestContext = new RequestContext(contextWrapper, routeData);
                controller.Execute(requestContext);
                Response.End();
            }
            else //Unhandled Errors from aplication
            {
                ErrorLogService.LogError(ex);
                HttpContextWrapper contextWrapper = new HttpContextWrapper(this.Context);
    
                RouteData routeData = new RouteData();
                routeData.Values.Add("controller", "Error");
                routeData.Values.Add("action", "Index");
    
                IController controller = new ErrorController();
                RequestContext requestContext = new RequestContext(contextWrapper, routeData);
                controller.Execute(requestContext);
                Response.End();
            }
        }
    

    And thtat is my ErrorController.cs

    public class ErrorController : Controller
    {
        // GET: Error
        public ViewResult Index()
        {
            Response.StatusCode = 500;
            Exception ex = Server.GetLastError();
            return View("~/Views/Shared/SAAS/Error.cshtml", ex);
        }
    
        public ViewResult NotFound()
        {
            Response.StatusCode = 404;
            return View("~/Views/Shared/SAAS/NotFound.cshtml");
        }
    }
    

    And that is my ErrorLogService.cs

    //common service to be used for logging errors
    public static class ErrorLogService
    {
        public static void LogError(Exception ex)
        {
            //Do what you want here, save log in database, send email to police station
        }
    }
    

提交回复
热议问题