asp.net core 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");  
 }
0
0
0
0
评论
未登录
暂无评论