netcore 3.1 自定义404逻辑

404页面,以前在netframework里,需要在iis上配置,或者在web.config里配置,在netcore mvc里,则可以用中间件来实现,非常简单!(别被“中间件”这个名词吓坏了)!!!

直接上代码,

1、首先创建一个404页面,比如:

        [Route("error/404")]
        public IActionResult Error404()
        {
              return View();
        }

上面的是Action,再创建对应的View页面,View页面我就不贴代码了。

2、写中间件,StartUp类的Configure方法里,

只要一句话:

  //404
            app.Use(async (context, next) =>
            {
                await next.Invoke();
                if (context.Response.StatusCode == 404)
                {
                    //也可以定义为其他地址(沐雪微商城)
                      context.Response.Redirect("/error/404");
                }
            });

            //404 end

具体的代码如下:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime applicationLeftTime)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            

            string OpenSwagger = Configuration.GetSection("AppSettingConfig:OpenSwagger").Value;//是否开启swagger
            if (OpenSwagger == "1")
            {
                app.UseSwagger().UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "MuXue.WeTao.Mall.Web API V1"); });
            }

            app.UseStaticFiles();

            app.UseRouting();

            app.UseCors(MyAllowSpecificOrigins);
            app.UseAuthentication(); //一定要在这个位置(app.UseAuthorization()上面)
            app.UseAuthorization();

            //404
            app.Use(async (context, next) =>
            {
//其他业务
await next.Invoke(); if (context.Response.StatusCode == 404) { //也可以为其他地址,甚至还可以只输出一句话 context.Response.Redirect("/error/404"); } }); //404 end app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); // endpoints.MapControllerRoute( // name: "areas", // pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}" //); }); }

 最简单的404返回还可以直接返回一句话:

 if (context.Response.StatusCode == 404)
                {
                    await context.Response.WriteAsync("404");
                }
原文地址:https://www.cnblogs.com/puzi0315/p/13062159.html