ASP.NET Core MVC中的两种404错误( 二 )


本章主要向读者介绍如下内容 。

  • ASP.NET Core MVC中的两种404错误 。
  • 如何在ASP.NET Core MVC中处理404 Not Found错误 。
19.1 HTTP状态码中的4××和5××HTTP状态码是用以表示网页服务器HTTP响应状态的3位数字代码 。 状态码的第一个数字代表了响应的5种状态之一 , 这里我们只介绍涉及的4××和5××系列 , 之前讲解过状态码3××和2×× 。
4××系列表示请求错误 , 代表了客户端可能发生了错误 , 从而妨碍了服务器的处理 。 常见的有401状态码、403状态码和404状态码 。
  • 401状态码:请求要求身份验证 。 对于需要登录的网页 , 服务器可能返回此响应 。
  • 403状态码:服务器已经理解请求 , 但是拒绝执行它 。 与401响应不同的是 , 身份验证并不能提供任何帮助 , 而且这个请求也不应该被重复提交 。
  • 404状态码:请求失败 , 请求希望得到的资源在服务器上未发现 。 没有信息能够告诉用户这个状况到底是暂时的还是永久的 。 假如服务器知道情况的话 , 应当使用410状态码来告知旧资源 , 因为某些内部的配置机制问题 , 访问内容已不可用 , 而且没有任何可以跳转的地址 。 404状态码被广泛应用于服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下 。
5××系列表示服务器在处理请求的过程中有错误或者异常状态发生 , 也可能是服务器意识到以当前的软硬件资源无法完成对请求的处理 。 常见的有500状态码和503状态码 。
  • 500状态码:服务器遇到了一个未曾预料的状况 , 导致了它无法完成对请求的处理 。 一般来说 , 这个问题都会在服务器的程序码出错时出现 。
  • 503状态码:由于临时的服务器维护或者过载 , 因此服务器当前无法处理请求 。 通常这是暂时状态 , 一段时间后会恢复 。
HTTP状态码是服务器和客户端之间交流信息的语言 。 通过查看网站日志的HTTP状态码 , 我们可以清楚地查看搜索引擎在网站的爬取情况 。
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所示 。
ASP.NET Core MVC中的两种404错误文章插图
图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() 。
19.2.1 404错误的类型在ASP.NET Core中 , 有两种类型的404错误可能发生 。