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"); }
作者:沐雪
文章均系作者原创或翻译,如有错误不妥之处,欢迎各位批评指正。本文版权归作者和博客园共有,如需转载恳请注明。
如果您觉得阅读这篇博客让你有所收获,请点击右下方【推荐】
为之网-热爱软件编程 http://www.weizhi.cc/