.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"); 控制器中处理就行了

posted @   sands  阅读(1653)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
点击右上角即可分享
微信分享提示