ssm框架使用重定向报404_如何在 ASP.NET Core MVC 中处理 404 错误
译文链接:https://www.infoworld.com/article/3545304/how-to-handle-404-errors-in-aspnet-core-mvc.html
asp.net core mvc 对应着 .NET Framework 中的 ASP.NET MVC, 前者可以跨平台,可扩展,高性能,不过令人惊讶的是,虽然 ASP.NET Core 提供了大量的可选项可以完美的处理 404 错误,但 ASP.NET Core MVC 在默认情况下并没有选择它们,你说奇怪不?
这就造成了当请求一个不存在的页面时,应用程序将会返回一个 404 错误,ASP.NET Core MVC 目前会展示一个浏览器通用的错误页,如下图所示:
这篇文章我准备讨论 3种 方式来优雅的处理这种 404 错误。
接下来我会在 Visual Studio 2019 中创建一个 ASP.NET Core MVC 项目,用这个项目去展示如何处理 404 错误。
然后把 ASP.NET Core MVC 项目跑起来,你会看到应用程序默认的首页,上面还带一行 welcome 的欢迎语?,如下图所示:
接下来我们尝试在浏览器中输入一个不存在的网址,比如说:http://localhost:6440/welcome
, 这时候 ASP.NET Core MVC 引擎将会访问这个地址的资源,可想而知,引擎肯定会返回一个 404 错误,你也会看到如下错误页,通常情况下这是非常让人难堪的,对吧。
检查 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 中间件
第二种可选的解决方案是,采用 ASP.NET Core 中内置的 UseStatusCodePages 中间件,下面的代码展示了如何在 Startup.Configure 方法中去实现 StatusCodePages 。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseStatusCodePages(); //Other code }
现在你可以把程序跑起来然后浏览一下这个不存在的资源,下图展示了这种情况下的输出结果:
使用 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 改成 服务压力大,请联系管理员
等等,一旦应用程序发生错误,你可以将用户导向你设置的错误页,然后展示你设置的错误信息。
ssm框架使用重定向报404_如何在 ASP.NET Core MVC 中处理 404 错误相关推荐
- 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 中处理 null 值
译文链接:https://www.infoworld.com/article/3434624/how-to-handle-null-values-in-aspnet-core-mvc.html 传统的 ...
- 如何在ASP.NET Core应用中实现与第三方IoC/DI框架的整合?
我们知道整个ASP.NET Core建立在以ServiceCollection/ServiceProvider为核心的DI框架上,它甚至提供了扩展点使我们可以与第三方DI框架进行整合.对此比较了解的读 ...
- 如何在 ASP.NET Core MVC 5 中处理未知的 Action
ASP.NET Core MVC 5 是一个轻量级,开源的,利于单元测试的基于 ASP.NET Core 运行时的 web 框架,在开发时你肯定会遇到不少那些 request 无法匹配 Action ...
- 如何在 ASP.NET Core 中实现全局异常拦截
异常是一种运行时错误,当异常没有得到适当的处理,很可能会导致你的程序意外终止,这篇就来讨论一下如何在 ASP.Net Core MVC 中实现全局异常处理,我会用一些 样例代码 和 截图 来说明这些概 ...
- 获取异常信息_如何在 ASP.NET Core 中实现全局异常拦截
异常是一种运行时错误,当异常没有得到适当的处理,很可能会导致你的程序意外终止,这篇就来讨论一下如何在 ASP.Net Core MVC 中实现全局异常处理,我会用一些 样例代码 和 截图 来说明这些概 ...
- [第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui
在我上篇文章如何在ASP.Net Core的生产环境中保护swagger ui中,我们讨论了如何使用基本身份验证来保护 swagger ui. 使用 OAuth 2.0 和 OpenIdConnect ...
- 如何在 ASP.NET Core 中使用 HttpClientFactory ?
ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. ...
- 如何在 ASP.Net Core 中使用 Autofac
依赖注入可以有效的实现对象之间的 松耦合 并能够实现代码的可测试和可维护性,ASP.Net Core 提供了一个极简版的容器实现对 依赖注入 的原生支持,然而内置的依赖注入容器相比成熟的 依赖注入容器 ...
最新文章
- android插件化-apkplug中以监听方式获取OSGI服务-09
- 捷报!又一名HIV感染者被治愈,干细胞移植再次立功
- linux mysql5.7.11安装_Linux下安装MySQL 5.7.11
- html显示数据库表格asp,ASP实现在WEB中显示电子表格数据 显示数据及生成HTML表格...
- 『一本通』差分约束系统
- 百度地图2.1获取密钥配置的Android签名证书的sha1值
- 内核中的HZ 及延迟等
- 1127 ZigZagging on a Tree (30 分)【难度: 一般 / 知识点: 根据中序遍历 后序遍历建树】
- php 动态切换数据库,thinkphp多数据库动态切换
- git指令快捷 idea_IDEA+Git+Gitlab使用详细教程
- Unity应用架构设计(1)—— MVVM 模式的设计和实施(Part 2)
- python成绩转换、百分制到五分制_设计一个程序,将从键盘上输入的百分制成绩转换成对应的五分制成绩并输出。90分以上为A,80~90分为B,...
- IO之	Properties类加载文件
- 《Adobe Dreamweaver CS6中文版经典教程》——第2课 HTML基础2.1 什么是HTML
- 图灵奖背后:一个奥斯卡拿到手软,一个公司卖了 160 亿
- Window2003 IIS+MySQL+PHP+Zend环境配置
- 「我们的首要之务,并不是遥望模糊的远方,而是专心处理眼前的事务。」---这是卡内基先生所强调的克服忧虑、开创人生的关键。...
- multisim怎么设置晶体管rbe_multisim晶体管
- 图像处理 var_threshold与binary_threshold
- php 499,nginx499错误
热门文章
- Python3中异常处理和try/except,try/finally的用法
- Python | 常见的反爬及解决方法,值得收藏
- 选择排序 - python实现详解
- c#自定义事件的使用方法
- 自己开发的一款基于PagedDataSource的datalist repeater控件,只需要在源程序中添加三行代码,即可实现通用分页
- NLP《词汇表示方法(三)word2vec》
- leetcode - 448. 找到所有数组中消失的数字
- pytorch——计算图与动态图机制
- TX2刷机flashOS finished后,卡在determining IP address解决方案
- 消息中间件的技术选型心得-RabbitMQ ActiveMQ和ZeroMQ