asp 判断数组等于_如何在 ASP.NET Core MVC 中处理 404 错误

译文链接:https://www.infoworld.com/article/3545304/how-to-handle-404-errors-in-aspnet-core-mvc.html

http://asp.net core mvc 对应着 .NET Framework 中的 http://ASP.NET MVC, 前者可以跨平台,可扩展,高性能,不过令人惊讶的是,虽然 http://ASP.NET Core 提供了大量的可选项可以完美的处理 404 错误,但 http://ASP.NET Core MVC 在默认情况下并没有选择它们,你说奇怪不?

这就造成了当请求一个不存在的页面时,应用程序将会返回一个 404 错误,http://ASP.NET Core MVC 目前会展示一个浏览器通用的错误页,如下图所示:

99e24f37a22c1d227b788884a08cf543.png

这篇文章我准备讨论 3种 方式来优雅的处理这种 404 错误。

接下来我会在 Visual Studio 2019 中创建一个 http://ASP.NET Core MVC 项目,用这个项目去展示如何处理 404 错误。

然后把 http://ASP.NET Core MVC 项目跑起来,你会看到应用程序默认的首页,上面还带一行 welcome 的欢迎语 ,如下图所示:

d94ca1cad52f4e599fa34ba48bb5acc5.png

接下来我们尝试在浏览器中输入一个不存在的网址,比如说:http://localhost:6440/welcome, 这时候 ASP.NET Core MVC 引擎将会访问这个地址的资源,可想而知,引擎肯定会返回一个 404 错误,你也会看到如下错误页,通常情况下这是非常让人难堪的,对吧。

99e24f37a22c1d227b788884a08cf543.png

检查 http://ASP.NET Core MVC 的 Response.StatusCode

有几种方式可以比较完美的处理这种默认的 404 错误,一个简单的方案就是去检查 response 的 http 状态码,一旦发现这个 status = 404,你可以重定向到一个web 中存在的页面或者一个特定的错误页,下面的代码展示了,你可以在 Startup.Configure 方法中进行全局判断,一旦发现404错误就导向 home 页面。

    public class Startup{public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.Use(async (context, next) =>{await next();if (context.Response.StatusCode == 404){context.Request.Path = "/Home";await next();}});}}

接下来运行web程序,然后键入 http://localhost:6440/welcome,你会发现最终展示了 home 页面。

下面是 Configure 方法的完整代码。

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}else{app.UseExceptionHandler("/Home/Error");}app.Use(async (context, next) =>{await next();if (context.Response.StatusCode == 404){context.Request.Path = "/Home";await next();}});app.UseStaticFiles();app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");});}

使用 UseStatusCodePages 中间件

第二种可选的解决方案是,采用 http://ASP.NET Core 中内置的 UseStatusCodePages 中间件,下面的代码展示了如何在 Startup.Configure 方法中去实现 StatusCodePages 。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.UseStatusCodePages();//Other code}

现在你可以把程序跑起来然后浏览一下这个不存在的资源,下图展示了这种情况下的输出结果:

8c2529585a890a6597b6b186e5cd1096.png

使用 UseStatusCodePagesWithReExecute 中间件

你可以利用 UseStatusCodePagesWithReExecute 中间件来处理 那种 Response 还没开始构建 就遇到的一些不成功的状态,有点绕哈,因此这个中间件不会处理 Response status 等于 404 的情况,当 404 发生的时候,这个中间件要做的就是将 request 重定向到另外一个 Action 去处理这个错误。

下面的代码展示了如何使用这个中间件将 request 重定向到另外一个 action 方法。

app.UseStatusCodePagesWithReExecute("/Home/HandleError/{0}");

然后再来看一下被重定向的 Action 方法。

[Route("/Home/HandleError/{code:int}")]
public IActionResult HandleError(int code)
{ViewData["ErrorMessage"] = $"Error occurred. The ErrorCode is: {code}";return View("~/Views/Shared/HandleError.cshtml");
}

现在我把展示错误信息的 HandleError 视图的创建留给你去实现吧!

最后,你可能想为一些错误码创建一些特定的view,比如说,你可以创建 Home/Error/500.cshtml 或者 Home/Error/404.cshtml 视图,然后根据 http status code 的值重定向到合适的错误页。

另外一种处理 404 错误的方式是使用一个自定义的页面,然后在页面上设置一些特定的错误代码,这样也方便隐藏一些比较重要的信息,比如将 404 改成 服务压力大,请联系管理员 等等,一旦应用程序发生错误,你可以将用户导向你设置的错误页,然后展示你设置的错误信息。

更多高质量干货:参见我的 GitHub: dotnetfly

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实例51:python

#题目:学习使用按位与 & 。 #程序分析:0&00; 0&10; 1&00; 1&11。 #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a 77 b a & 3 print (‘a & b %d’ % b) b & 7 print (‘a & b %d’ % b)

asp.net core环境变量product/development设置

一:项目里修改环境变量 环境变量可以在launchSettings.json文件里面设置,也可以右键项目->属性->调试->环境变量进行设置。 这两种方式的内容是同步的,任何一种方式修改后,另外一种就会同步。只不过一个是直接修改文件&a…

win102004优化_win10 2004系统电脑出现玩命运2掉帧的问题

有一位深度技术用户喜欢一款叫命运2的游戏,但是他的电脑安装win10 2004系统后,发现玩命运2的时候,画面经常出现掉帧卡顿卡死等问题,非常影响了正常游戏。接下来深度技术小编给大家分享一下win10电脑玩命运2掉帧的详细解决方法&…

实例52:python

#题目:学习使用按位或 | 。 #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a 77 b a | 3 print (‘a | b is %d’ % b) b | 7 print (‘a | b is %d’ % b)

实例53:python

#学习使用按位异或 ^ #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a 77 b a ^ 3 print (‘The a ^ 3 %d’ % b) b ^ 7 print (‘The a ^ b %d’ % b)

unity全栈开发是什么意思_unity游戏公司面试问题总结

面试大计切勿怕你说的面试官听不懂就重复解释&#xff0c;一定要言简意赅的回答。C#篇一、请简述ArrayList和List的主要区别&#xff1f;ArrayList就是一个List<Object>而已&#xff0c;泛型集合的优势就是类型安全和无装箱。二、请简述nternal的作用internal&#xff1a…

springBoot 解决前后端分离项目中跨越请求,同源策略

今天在做项目的过程&#xff0c;采用前后端分离技术的时遇到采用ajax请求无法访问后台接口&#xff0c;按F12&#xff0c;查看浏览器运行状态时&#xff0c;报如下错误 为了解决浏览的同源策略&#xff0c;就必须了解什么是同源策略。 1.什么是同源策略 同源策略(Same origin p…

轻量级锁_并发编程实战05:锁的状态

无锁、偏向锁 、轻量级锁和重量级锁这四种锁是指锁的状态&#xff0c;专门针对synchronized的。在介绍这四种锁状态之前还需要介绍一些额外的知识。首先为什么Synchronized能实现线程同步&#xff1f;在回答这个问题之前我们需要了解两个重要的概念&#xff1a;“Java对象头”、…

实例54:python

#题目&#xff1a;取一个整数a从右端开始的4〜7位。 #(1)先使a右移4位。 #(2)设置一个低4位全为1,其余全为0的数。可用(0<<4) #(3)将上面二者进行&运算。 #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a int(input(‘input a number:\n’)) b a &…

SSH隧道技术----端口转发,socket代理

原文的原始出处不详&#xff0c;本文也是在复制引用了某篇转载&#xff0c;并做了必要的整理与编辑。 本文的受众 如果你遇到了以下问题&#xff0c;那么你应该阅读这篇文章 我听说过这种技术&#xff0c;我对它很感兴趣我想在家里访问我在公司的机器&#xff08;写程序&#x…

5d4的白平衡模式_佳能5D4/5D3/6D2系列中高端单反相机和全画幅微单EOS R专题系列课程...

【相机市场谁老大&#xff1f;佳能连续18年全球可更换镜头相机市场份额第一】佳能宣布&#xff0c;从2003年到2020年佳能连续18年全球可更换镜头相机市场份额(台数)第一名&#xff0c;包括数码单反以及微单相机。2019-2020年数码相机市场的销售情况。可更换镜头相机中&#xff…

实例55:python

#题目&#xff1a;学习使用按位取反~ #1)先使a右移4位。 #(2)设置一个低4位全为1,其余全为0的数。可用(0<<4) #(3)将上面二者进行&运算。 #!/usr/bin/python -- coding: UTF-8 -- if name ‘main’: a 234 b ~a print (‘The a’s 1 complement is %d’ % b) a …

jQuery 简单案例

案例一&#xff1a;全选、反选、取消实例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><input type"button" value"全选" …

实例56:python

#题目&#xff1a;画图&#xff0c;学用circle画圆形。 #usr/bin/env python #coding:utf-8 if name ‘main’: import turtle turtle.title(“画圆”) turtle.setup(800,600,0,0) penturtle.Turtle() pen.color(“yellow”) pen.width(5) pen.shape(“turtle”) pen.speed(…

JAVA之运算符优先级

Java运算符优先级从高到低 运算符结合性[ ] . ( ) (方法调用)从左向右! ~ -- (一元运算) -(一元运算)从右向左* / %从左向右 -从左向右<< >> >>>从左向右< < > > instanceof从左向右 !从左向右&从左向右^从左向右|从左向右&&从左…

5 html 根据手机转动而转动_手机安装陀螺仪有什么用 手机安装陀螺仪作用介绍【详解】...

手机中有各种传感器&#xff0c;其中陀螺仪是个听起来高大上的玩意&#xff0c;今天小编就来给大家科普一下&#xff0c;陀螺仪在手机中的具体应用及其原理。 陀螺仪(角速度传感器)它的测量物理量是偏转、倾斜时的转动角速度。在手机上&#xff0c;仅用加速度传感器没办法测量或…

实例57:python

#画直线 import turtle def drawline(n): tturtle.Pen() t.color(0.3,0.8,0.6) #设置颜色&#xff0c;在0–1之间 t.begin_fill() #开始填充颜色 for i in range(n): #任意边形 t.forward(50) t.left(360/n) t.end_fill() #结束填充颜色 drawline(4)

光谱 波长_【第三课】红外光谱仪及其联用技术

第三课前两节课&#xff1a;【第一课】什么是红外光谱方法、【第二课】如何进行红外光谱结构解析&#xff0c;孙素琴教带我们学习了红外光谱的前世今生&#xff0c;以及红外光谱的理论基础。相信小伙伴们都有所收获&#xff0c;今天咱们将跟随另一位清华大学红外光谱专家周群老…

实例58:python

#画方块 #!/usr/bin/python -- coding: UTF-8 -- from turtle import * forward(100) left(90) forward(100) for i in range(2): left(90) forward(100)

WPF 蒙罩层 LoadingPage

WPF 蒙罩层 LoadingPage 原文:WPF 蒙罩层 LoadingPageWPF 蒙罩层 LoadingPage 前言 无论是在PC客户端&#xff0c;移动端&#xff0c;网站&#xff0c;在遇到长时间处理的时候都会需要用到蒙罩层&#xff0c;让用户有更好的体现。今天上网逛了一下各位前辈网友的蒙罩层的实现方…