MVC5自定义错误页,直接返回错误不302

Global中

复制代码
protected void Application_Error(object sender, EventArgs e)
        {
            //获取最后一次异常信息
            var ex = Server.GetLastError();
            // Log.Error(ex); //记录日志信息  
            NLogLogger nlog = new NLogLogger();
            nlog.Error("Error", ex);
            //获取错误状态码
            var httpStatusCode = (ex is HttpException) ? (ex as HttpException).GetHttpCode() : 500; //这里仅仅区分两种错误 
            //取得当前上下文
            var httpContext = ((MvcApplication)sender).Context;
            //清除当前http请求的所有错误
            httpContext.ClearError();
            httpContext.Response.Clear();
            httpContext.Response.ContentType = "text/html";
            //设置返回状态码
            httpContext.Response.StatusCode = httpStatusCode;
          //  var shouldHandleException = true;
            //错误信息类
            HandleErrorInfo errorModel;
            //定义路由
            var routeData = new RouteData();
            routeData.Values["controller"] = "error";

            switch (httpStatusCode)
            {
                case 404:
                    routeData.Values["action"] = "NotFound";
                    errorModel = new HandleErrorInfo(new Exception(string.Format("No page Found", httpContext.Request.UrlReferrer), ex), "error", "NotFound");
                    break;

                default:
                    routeData.Values["action"] = "servererror";
                    errorModel = new HandleErrorInfo(new Exception(string.Format("Internal server error", httpContext.Request.UrlReferrer), ex), "error", "servererror");
                    break;
            }

            var controller = new Controllers.ErrorController();
            controller.ViewData.Model = errorModel; //通过代码路由到指定的路径  
            ((IController)controller).Execute(new RequestContext(new HttpContextWrapper(httpContext), routeData));

        }
复制代码

 

posted @   fy___~  阅读(82)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示