asp.netcoremvc对应着.NETFramework中的ASP.NETMVC,前者可以跨平台,可扩展,高性能,不过令人惊讶的是,虽然ASP.NETCore提供了大量的可选项可以完美的处理404错误,但ASP.NETCoreMVC在默认情况下并没有选择它们,你说奇怪不?
这就造成了当请求一个不存在的页面时,应用程序将会返回一个404错误,ASP.NETCoreMVC目前会展示一个浏览器通用的错误页,如下图所示:
这篇文章我准备讨论3种方式来优雅的处理这种404错误。
接下来我会在VisualStudio2019中创建一个ASP.NETCoreMVC项目,用这个项目去展示如何处理404错误。
然后把ASP.NETCoreMVC项目跑起来,你会看到应用程序默认的首页,上面还带一行welcome的欢迎语,如下图所示:
接下来我们尝试在浏览器中输入一个不存在的网址,比如说:
http://localhost:6440/welcome,这时候ASP.NETCoreMVC引擎将会访问这个地址的资源,可想而知,引擎肯定会返回一个404错误,你也会看到如下错误页,通常情况下这是非常让人难堪的,对吧。
检查ASP.NETCoreMVC的Response.StatusCode
有几种方式可以比较完美的处理这种默认的404错误,一个简单的方案就是去检查response的http状态码,一旦发现这个status=404,你可以重定向到一个web中存在的页面或者一个特定的错误页,下面的代码展示了,你可以在Startup.Configure方法中进行全局判断,一旦发现404错误就导向home页面。
publicclassStartup
{
publicvoidConfigure(IApplicationBuilderapp,IWebHostEnvironmentenv)
{
app.Use(async(context,next)=>
{
awaitnext();
if(context.Response.StatusCode==404)
{
context.Request.Path="/Home";
awaitnext();
}
});
}
}
接下来运行web程序,然后键入
http://localhost:6440/welcome,你会发现最终展示了home页面。
下面是Configure方法的完整代码。
publicvoidConfigure(IApplicationBuilderapp,IWebHostEnvironmentenv)
{
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.Use(async(context,next)=>
{
awaitnext();
if(context.Response.StatusCode==404)
{
context.Request.Path="/Home";
awaitnext();
}
});
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints=>
{
endpoints.MapControllerRoute(
name:"default",
pattern:"{controller=Home}/{action=Index}/{id?}");
});
}
使用UseStatusCodePages中间件
第二种可选的解决方案是,采用ASP.NETCore中内置的UseStatusCodePages中间件,下面的代码展示了如何在Startup.Configure方法中去实现StatusCodePages。
publicvoidConfigure(IApplicationBuilderapp,IWebHostEnvironmentenv)
{
app.UseStatusCodePages();
//Othercode
}
现在你可以把程序跑起来然后浏览一下这个不存在的资源,下图展示了这种情况下的输出结果:
使用UseStatusCodePagesWithReExecute中间件
你可以利用
UseStatusCodePagesWithReExecute中间件来处理那种Response还没开始构建就遇到的一些不成功的状态,有点绕哈,因此这个中间件不会处理Responsestatus等于404的情况,当404发生的时候,这个中间件要做的就是将request重定向到另外一个Action去处理这个错误。
下面的代码展示了如何使用这个中间件将request重定向到另外一个action方法。
app.UseStatusCodePagesWithReExecute("/Home/HandleError/{0}");
然后再来看一下被重定向的Action方法。
[Route("/Home/HandleError/{code:int}")]
publicIActionResultHandleError(intcode)
{
ViewData["ErrorMessage"]=$"Erroroccurred.TheErrorCodeis:{code}";
returnView("~/Views/Shared/HandleError.cshtml");
}
现在我把展示错误信息的HandleError视图的创建留给你去实现吧!
最后,你可能想为一些错误码创建一些特定的view,比如说,你可以创建Home/Error/500.cshtml或者Home/Error/404.cshtml视图,然后根据httpstatuscode的值重定向到合适的错误页。
另外一种处理404错误的方式是使用一个自定义的页面,然后在页面上设置一些特定的错误代码,这样也方便隐藏一些比较重要的信息,比如将404改成服务压力大,请联系管理员等等,一旦应用程序发生错误,你可以将用户导向你设置的错误页,然后展示你设置的错误信息。
相关文章
-
Linux服务器宝塔面板操作方法:404和301如何设置
很多新手朋友利用服务器建站有个疑问,就是服务器可以像虚拟主机一样建立临时站点,拥有临时域名吗?其实是可以的,不过需要服务器配置一个虚拟主机,最好的方法就是在本地建站,上线的时候把网站搬迁过来。,解析好以后打开宝塔面板点击网站,点击添加站点,把刚才解析的俩个域名添加进去,备注可以自己随便填写或者默认都可以,这里可以选择创建FTP和数据库,建议一次性创建好,PHP版本,你选择一键环境配置时候的版本。,
2024-03-21 21:05 -
搜索排名专家教你怎么做好企业网站的排名优化 网站编辑如何撰写文案才能做好搜索排名效果?
同时要避免在网站页面上加一些单击事件,用户只要一点击鼠标就弹出一些别的网站页面,有时候会弹出好多个广告页面,这样的情况需要大家注意一下!,想必大家也都知道,在一些网站上会出现留言、注册后才可以进行互动,在我们注册时候须填的项目非常的多。,一般而言,长尾关键词在文章的开头、中间、末尾各布局一次就可以了。
2024-03-21 18:12 -
「网站优化」web优化404不起作用吗对SEO有什么影响 「万词霸屏」万词霸屏系统可以做核心词吗
对于许多企业或个人网站来说,行业SEO优化正变得越来越激烈。,换个概念想,如果万次霸屏系统可以做热词、行业词那么就打乱了seo行业市场了,seo优化人员不就是可以下岗了吗关键词价格低、排名好、又能做多首页霸屏,又能做热门词霸屏,这样的产品不存在,没有哪一家霸屏公司可以承诺说我们有这样的效果的,不信你可以去各个万词霸屏公司挨个问!,任何产品都是不完美的,社会就是由众多不完美的人组合在一起,其实说实话
2024-03-21 18:04 -
网站页面出现很多404该怎么办 提升网站权重主要注意什么
网站页面出现很多404该怎么办通过上文的介绍,明白在信息时代,网页内容常遭删改。,BBC互联网研究专家PaulMyers告诉我们网上信息的存储妙招和好用工具。,3、高质量的外部链接外链这一块现在也是老生常谈了,其重要性不言而喻。
2024-03-21 18:00 -
京东店铺的瀑布流效果代码模板
.userjLatticetaomei-20140411.pubu_cont{position:relative;width:990px;height:1020px;}.userjLatticetaomei-20140411.pubu_cont.cont_box{position:absolute;/*border:solid1px#000;*/width:229px;padding:6px;z-
2024-03-20 13:45 -
做好独立站的基础要求是什么?要注意哪些?
外挂式检查:重点检查首页同步加载的JS,插件弹窗尽量在客户3-5页后载入,许多卖家设置在客户刚刚进入网站时展示一些订阅或者优惠券,热卖弹窗。,推荐用户在浏览了3个页面后再显示弹窗类的内容。,6、基础应用:多种语言:google免费翻译插件;小语种方案,与二级域名配合,便于收录。
2024-03-19 17:04
热门标签
-
做SEO原创真的最重要吗,写原创文章的流量多大直接关系
2024-03-21 17:48
-
SEO排名手机查询工具有哪些,如何查寻竞争对手网站基础数据
2024-03-21 17:48
-
优化网站符合搜索引擎的URL结构方法(什么样的URL结构是搜索引擎喜欢的)
2024-03-21 17:48
-
怎么把网站关键词排名靠前到百度首页前3位(提升关键词排名的方法)
2024-03-21 17:48
-
什么样的文章内容才是百度喜欢的(符合SEO规则的文章怎么写)
2024-03-21 17:48
-
怎么优化网站排名靠前,如何网站关键词在百度快速排到首页前10位
2024-03-21 17:48
-
新站怎么度过沙盒期(百度沙盒是什么意思)
2024-03-21 17:48
-
SEO如何打造完美的内链系统(网站内链如何布置效果更好)
2024-03-21 17:48
-
Google People Also Ask是什么东西(如何利用谷歌PAA抢占自然流量)
2024-03-21 17:48
-
看商端玩家Robots定义:Robots文件写法+3个实战经验分享
2024-03-21 17:48
-
为什么说短视频是未来获取流量趋势,所有图文内容都可以制作成视频获取流量
2024-03-21 17:48
-
微信搜一搜霸屏引流技术,微信搜一搜搜索引流思维分享
2024-03-21 17:48
-
用户投稿对网站SEO有利吗(对于用户投稿如何合理利用)
2024-03-21 17:48
-
百度索引量持续缓慢下降是什么原因,应该怎么办?
2024-03-21 17:48
-
网站初期如何选择首选域 ,如何设置首选域有利于SEO
2024-03-21 17:48
-
什么是纯文本外链(文本外链,锚文本外链,超链接如何选择)
2024-03-21 17:48
-
什么是权重域名,对网站有什么好处(如何识别虚假权重域名)
2024-03-21 17:48
-
友情链接对网站优化的重要性(网站到底有没有必要交换友情链接)
2024-03-21 17:48
-
百度蜘蛛的IP路线大全(数字营销网带你认识百度蜘蛛IP库)
2024-03-21 17:48
-
官网seo优化如何进行,企业官网优化怎么开始
2024-03-21 17:48