zoukankan      html  css  js  c++  java
  • .net core 自定义404 500页面

    常用处理方式

    自己定制网站的404、500页面的方式有很多,比如修改nginx配置文件,指定请求返回码对应的页面,
    .netframework项目中修改webconfig文件,指定customerror节点的文件路径都可以。
    在那么在.net core中如何处理呢。

    500错误页

    • 500的错误都是靠拦截处理,在.netcore mvc拦截器中处理也可以。
    public class ErrorPageFilter : ActionFilterAttribute
    {
            public override void OnResultExecuted(ResultExecutedContext context)
            {
                if (context.HttpContext.Response.StatusCode == 500)
                {
                    context.HttpContext.Response.Redirect("error/500");
                }
                base.OnResultExecuted(context);
            }
    }
    
    [ErrorPageFilter]
    public abstract class PageController
    {}
    
    • .net core mvc 创建的时候也自带了错误页的管道处理
      在 startup.cs中
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
                //开发环境直接展示错误堆栈的页面
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    //正式环境自定义错误页
                    app.UseExceptionHandler("/Home/Error");
                    app.UseHsts();
                }
    }
    
    在 home控制器中 有这样的方法
    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
    public IActionResult Error()
    {
        return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
    }
    
    自己把 error视图文件替换掉自己想要的样式就可以了。
    

    404页面

    通过上述方法是拦截不到404页面的,应该借助管道的中间件去处理,在 startup.cs文件的 configure方法中添加

      app.UseStatusCodePagesWithReExecute("/error/{0}");
    

    添加 error控制器

    public class ErrorController : Controller
    {
            /// <summary>
            /// {0}中是错误码
            /// </summary>
            /// <returns></returns>
            [Route("/error/{0}")]
            public IActionResult Page()
            {
                //跳转到404错误页
                if (Response.StatusCode == 404)
                {
                    return View("/views/error/notfound.cshtml");
                }
                return View();
            }
    }
    
    

    需要注意的是错误页拦截不要写在这里在上面的 app.UseExceptionHandler("/Home/Error"); 控制器中处理就行了

  • 相关阅读:
    zabbix key 模样
    windows key代码
    windows更新代理地址配置
    Proftpd搭建
    SAS界面标题乱码
    jenkins-2.225部署
    DNS 安全详解
    DNS搭建
    修复linux登录超时问题
    prometheus安装全过程
  • 原文地址:https://www.cnblogs.com/sands/p/10898680.html
Copyright © 2011-2022 走看看