ASP.NET Core MVC中的两种404错误( 二 )
本章主要向读者介绍如下内容 。
- ASP.NET Core MVC中的两种404错误 。
- 如何在ASP.NET Core MVC中处理404 Not Found错误 。
4××系列表示请求错误 , 代表了客户端可能发生了错误 , 从而妨碍了服务器的处理 。 常见的有401状态码、403状态码和404状态码 。
- 401状态码:请求要求身份验证 。 对于需要登录的网页 , 服务器可能返回此响应 。
- 403状态码:服务器已经理解请求 , 但是拒绝执行它 。 与401响应不同的是 , 身份验证并不能提供任何帮助 , 而且这个请求也不应该被重复提交 。
- 404状态码:请求失败 , 请求希望得到的资源在服务器上未发现 。 没有信息能够告诉用户这个状况到底是暂时的还是永久的 。 假如服务器知道情况的话 , 应当使用410状态码来告知旧资源 , 因为某些内部的配置机制问题 , 访问内容已不可用 , 而且没有任何可以跳转的地址 。 404状态码被广泛应用于服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下 。
- 500状态码:服务器遇到了一个未曾预料的状况 , 导致了它无法完成对请求的处理 。 一般来说 , 这个问题都会在服务器的程序码出错时出现 。
- 503状态码:由于临时的服务器维护或者过载 , 因此服务器当前无法处理请求 。 通常这是暂时状态 , 一段时间后会恢复 。
19.1.1 ASP.NET Core中的404错误404错误信息有两种 , 我们在之前已经提及了 。 首先了解第一种:找不到指定ID的信息 。 当无法通过指定的ID找到学生、产品和客户等信息的时候产生404错误 , 可以参考HomeController中的Details()的方法 , 代码如下 。
var student = _studentRepository.GetStudentById(id);//判断学生信息是否存在if(student == null){Response.StatusCode = 404;return View("StudentNotFound" , id);}//实例化HomeDetailsViewModel并存储Student详细信息和PageTitleHomeDetailsViewModel homeDetailsViewModel = new HomeDetailsViewModel(){Student = student ,PageTitle = "学生详情"};//将HomeDetailsViewModel对象传递给View()方法return View(homeDetailsViewModel);
可以通过传递一个ID为99的值来调用HomeController中的Details()方法:http://localhost:13380/home/details/99 , 查询不到该学生的信息 , 然后跳转到StudentNotFound视图中 。19.1.2 404错误信息的视图代码在Views/Home文件夹中创建一个名为StudentNotFound.cshtml的视图文件 , 我们使用Bootstrap 4的样式来优化视图 , 代码如下 。
@model int@{ViewBag.Title = "404错误";}404 Not Found错误 :查询不到学生ID为 @Model的信息 。单击此处查看学生信息列表
在这种情况下 , 我们知道用户正在尝试转到学生详情视图页面 , 但因为提供的ID值无效 , 所以我们需要返回一个带有提示消息的自定义错误页面 , 提示用户找不到ID以及可以查看学生信息列表的链接 , 效果如图19.1所示 。文章插图
图19.1
第二种:请求的URL和路由不匹配 。 请参考http://localhost:13380/market/food , 它也会触发404错误异常信息 。 在这种情况下 , 我们无法知道用户到底在访问什么页面 , 因此无法显示自定义错误页面 。 我们通常都会返回一个统一的错误页面 。
19.2 统一处理ASP.NET Core中的404错误在本节中 , 我们将学习如何在ASP.NET Core中统一处理404错误 , 即Page Not Found错误 。 在此过程中 , 我们将学习以下3个中间件 , 这些组件的作用是处理ASP.NET Core中的状态码页 。
- UseStatusCodePages() 。
- UseStatusCodePagesWithRedirects() 。
- UseStatusCodePagesWithReExecute() 。
- 找不到指定ID的资源信息 。 关于如何处理这种类型的404错误 , 我们在前面的章节已经介绍了——制作自定义的错误页面 。
- 请求的URL和路由不匹配 。 在本节中 , 我们将学习如何以统一的方式处理此类404错误 。
- 对Spring MVC接口进行Mock测试
- 评估|微软新专利:用Quality Score评估会议质量
- SpringBoot工程下Spring MVC技术的应用
- 基于选项模式实现.NET Core的配置热更新
- TEQ|DEVIL TOYS 200% CORE TEQ 63 潮玩摆件
- 专攻难题:Rails、MVC及最常用的Rails命令
- NET|谷歌Cloud Functions上线微软.NET Core 3.1 添加支持VB和F#
- 谷歌Cloud Functions上线微软.NET Core 3.1 添加支持VB和F#
- SpringBootWeb源码解析SpringMVC自动配置
- 亲民首选---Anker Soundcore Life Note真无线蓝牙耳机