asp.net 404页面配置、 asp.net MVC 配置404页面、iis 配置404页面,指定404错误页面,设置404错误页面

通过标题的三个问题

1、asp.net 404页面配置、  

2、asp.net MVC 配置404页面、

3、iis 配置404页面;

可以看出,这是一篇了不得的问题,并进行全面讲解;

 除了围绕以上三个核心问题外,我们也对以下2个核心场景也作出分析;

1.MVC模式

2.传统模式;

往往这2种模式是混合一起使用的。

一、MVC模式

如:www.jijiyuan.com/news/details/1

按照URL分析:

这个站点下有个“news”文件夹,在“news”文件夹下有个“details”,接着下面有个1

其实,这样的路径是由MVC管道处理后的路径,在项目中他是这样的;

“news”是控制器

“details”是动作,或者说是方法,你也可以理解成页面

“1”是参数

代码如下:

    public class NewsController : Controller{// GET: Newspublic ActionResult Index(){return View();}public ActionResult Details(int id){return View();}}

二、传统模式

如:www.jijiyuan.com/1.html

这1.html是真实存在的,如果不存在会提示404错误;如下图

三、解决“控制器”或“路径”不存在,跳转指定页面

 3.1、项目结构介绍

如上图,我这里有一个名为“Error”的控制器;代码如下

cs代码

    public class ErrorController : Controller{// GET: Errorpublic ActionResult Rrror404(){return View();}}

html代码

<!DOCTYPE html><html>
<head><meta name="viewport" content="width=device-width" /><title>Rrror404</title>
</head>
<body><h1> Rrror404 </h1><p>你访问的页面不存在,点击跳转<a href="/">首页</a></p><h3><a href="/">去首页</a></h3>
</body>
</html>

3.2、【推荐】配置根目录的Web.config解决404错误问题

在你的站点找到Web.config文件,文档结构如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration><system.web><compilation debug="true" targetFramework="4.5"/><httpRuntime targetFramework="4.5"/> </system.web><system.webServer><handlers><remove name="ExtensionlessUrlHandler-Integrated-4.0"/><remove name="OPTIONSVerbHandler"/><remove name="TRACEVerbHandler"/><add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler"preCondition="integratedMode,runtimeVersionv4.0"/></handlers> </system.webServer>
</configuration>

我们需要将下面代码加入到【system.web】节点里面

<customErrors mode="On" defaultRedirect="/Error/Rrror404"><error statusCode="404" redirect="/Error/Rrror404" />
</customErrors>

加入后完整代码如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration><system.web><compilation debug="true" targetFramework="4.5"/><httpRuntime targetFramework="4.5"/> <customErrors mode="On" defaultRedirect="/Error/Rrror404"><error statusCode="404" redirect="/Error/Rrror404" /></customErrors></system.web><system.webServer><handlers><remove name="ExtensionlessUrlHandler-Integrated-4.0"/><remove name="OPTIONSVerbHandler"/><remove name="TRACEVerbHandler"/><add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler"preCondition="integratedMode,runtimeVersionv4.0"/></handlers> </system.webServer>
</configuration>

3.2.1、注意

注意:redirect="url"里面的url不要填文件地址,而是要填写请求404页面的控制器。 

3.2.2 、mode属性说明:

本地调试时,用RemoteOnly属性;发布时,用On

On:指定启用自定义错误。如果没有指定 defaultRedirect,用户将看到一般性错误。
Off:指定禁用自定义错误。这允许显示详细的错误。
RemoteOnly:指定仅向远程客户端端显示自定义错误,并向本地主机显示 ASP.NET 错误。这是默认值。 

3.2.3、再次访问 

我们访问错误网站路径

访问 

http://localhost:58146/Home/Index2

网站会字段跳转到

http://localhost:58146/Error/Rrror404?aspxerrorpath=/Home/Index2

 3.3、【不推荐】修改Global.asax解决404错误问题

如果你配置了Web.config,则不需要修改Global.asax

如访问

http://localhost:58146/Home/Index2

在Global.asax文件中增加如下代码

protected void Application_Error(object sender, EventArgs e)
{Exception ex = Server.GetLastError();if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 404){Response.Redirect("/Error/Rrror404");}
}

完整代码

public class MvcApplication : System.Web.HttpApplication
{protected void Application_Start(){AreaRegistration.RegisterAllAreas();GlobalConfiguration.Configure(WebApiConfig.Register);FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);}protected void Application_Error(object sender, EventArgs e){Exception ex = Server.GetLastError();if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 404){Response.Redirect("/Error/Rrror404");}}
}

注意事项: 在开发时候,我们经常会在Global.asax中的Application_Error方法中使用Response.Redirect方法跳转到自定义错误页,但有时候(特别是当站点部署到 IIS 后)Application_Error方法中使用Response.Redirect方法会失效,当发生异常错误后还是显示的默认错误黄页。

其根本原因是尽管我们在Application_Error方法中使用了Response.Redirect方法,但是当系统发生异常错误后Asp.Net认为异常并没有被处理,所以不会跳转到Application_Error方法中Response.Redirect指向的页面,最终还是会跳转到默认错误黄页。

解决这个问题的办法很简单就是在Application_Error方法中使用Response.Redirect做跳转前,先调用Server.ClearError()方法告诉系统发生的异常错误已经被处理了,这样再调用Response.Redirect方法系统就会跳转到自定义错误页面了。

增加代码后再次访问

http://localhost:58146/Error/Rrror404

3.4、如果是直接访问不存在的文件呢?它还是会报错的

http://localhost:58146/1.html

这个时间你需要看,第四节

四、访问不存在的静态资源,404错误问题解决

4.1、背景介绍

如我的站点下没有1.html这个文件,用户访问了,报错404

http://localhost:58146/1.html

4.2、【推荐】配置根目录的Web.config解决不存在文件的404错误问题

 我们需要在第三节代码基础上去修改【Web.config】

第三节代码如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration><system.web><compilation debug="true" targetFramework="4.5"/><httpRuntime targetFramework="4.5"/> <customErrors mode="On" defaultRedirect="/Error/Rrror404"><error statusCode="404" redirect="/Error/Rrror404" /></customErrors></system.web><system.webServer><handlers><remove name="ExtensionlessUrlHandler-Integrated-4.0"/><remove name="OPTIONSVerbHandler"/><remove name="TRACEVerbHandler"/><add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler"preCondition="integratedMode,runtimeVersionv4.0"/></handlers> </system.webServer>
</configuration>

在【system.webServer】节点增加代码

<httpErrors errorMode="Custom"><remove statusCode="404" subStatusCode="-1" /><error statusCode="404" prefixLanguageFilePath="" path="/Error/Rrror404" responseMode="ExecuteURL" />
</httpErrors>

完整代码

<?xml version="1.0" encoding="utf-8"?>
<configuration><system.web><compilation debug="true" targetFramework="4.5"/><httpRuntime targetFramework="4.5"/> <customErrors mode="On" defaultRedirect="/Error/Rrror404"><error statusCode="404" redirect="/Error/Rrror404" /></customErrors></system.web><system.webServer><handlers><remove name="ExtensionlessUrlHandler-Integrated-4.0"/><remove name="OPTIONSVerbHandler"/><remove name="TRACEVerbHandler"/><add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler"preCondition="integratedMode,runtimeVersionv4.0"/></handlers> <httpErrors errorMode="Custom"><remove statusCode="404" subStatusCode="-1" /><error statusCode="404" prefixLanguageFilePath="" path="/Error/Rrror404" responseMode="ExecuteURL" /></httpErrors></system.webServer>
</configuration>

详细节点说明请看第六节  

再次访问http://localhost:58146/1.html

4.3、【推荐】你也可以通过配置IIS的站点来设置这个错误页面

在IIS中找到你的站点,在【功能视图】中找到【错误页】

 双击进入,找到404配置项,点击后,在右侧有个“编辑”,点击“编辑”,弹出窗口,你就可以编辑它了;这个设置,和【4.2小节】修改【Web.config】效果基本一直。

五、完整修改【Web.config】后的代码

5.1、Web.config完整代码

<?xml version="1.0" encoding="utf-8"?>
<!--有关如何配置 ASP.NET 应用程序的详细信息,请访问https://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration><appSettings><add key="webpages:Version" value="3.0.0.0"/><add key="webpages:Enabled" value="false"/><add key="ClientValidationEnabled" value="true"/><add key="UnobtrusiveJavaScriptEnabled" value="true"/></appSettings><system.web><compilation debug="true" targetFramework="4.5"/><httpRuntime targetFramework="4.5"/><customErrors mode="On" defaultRedirect="/Error/Rrror404"><error statusCode="404" redirect="/Error/Rrror404" /></customErrors></system.web><system.webServer><handlers><remove name="ExtensionlessUrlHandler-Integrated-4.0"/><remove name="OPTIONSVerbHandler"/><remove name="TRACEVerbHandler"/><add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler"preCondition="integratedMode,runtimeVersionv4.0"/></handlers><httpErrors errorMode="Custom"><remove statusCode="404" subStatusCode="-1" /><error statusCode="404" prefixLanguageFilePath="" path="/Error/Rrror404" responseMode="ExecuteURL" /></httpErrors></system.webServer> 
</configuration>

5.2、重点代码1:对访问路径错误进行404处理

    <customErrors mode="On" defaultRedirect="/Error/Rrror404"><error statusCode="404" redirect="/Error/Rrror404" /></customErrors>

 注意:redirect="url"里面的url不要填文件地址,而是要填写请求404页面的控制器。

mode属性说明:
本地调试时,用RemoteOnly属性;发布时,用On

On:指定启用自定义错误。如果没有指定 defaultRedirect,用户将看到一般性错误。
Off:指定禁用自定义错误。这允许显示详细的错误。
RemoteOnly:指定仅向远程客户端端显示自定义错误,并向本地主机显示 ASP.NET 错误。这是默认值。 

5.3、重点代码2:对访问无效文件进行404处理

    <httpErrors errorMode="Custom"><remove statusCode="404" subStatusCode="-1" /><error statusCode="404" prefixLanguageFilePath="" path="/Error/Rrror404" responseMode="ExecuteURL" /></httpErrors>

详细节点说明请看第六节 


 六、Web.config配置节点介绍

本节点摘录

iis7设置404,使用web.config配置404,HTTP错误httpErrors模块-豫章小站

您可以<httpErrors>在ApplicationHost.config文件中的服务器级别以及相应Web.config文件中的站点和应用程序级别配置元素。

6.1、兼容性

笔记
IIS 10.0<httpErrors>在IIS 10.0中未修改该元素。
IIS 8.5<httpErrors>IIS 8.5中未修改该元素。
IIS 8.0<httpErrors>在IIS 8.0中未修改该元素。
IIS 7.5allowAbsolutePathsWhenDelegated属性已添加到<httpErrors>IIS 7.5中的元素
IIS 7.0<httpErrors>元素是在IIS 7.0中引入的。
IIS 6.0<httpErrors>元素替换了IIsWebService配置数据库对象的IIS 6.0 HttpErrors属性。

6.2、属性

属性描述
allowAbsolutePathsWhenDelegated可选的布尔属性。

设置为true时,<httpErrors>委派节时,允许自定义错误页面使用绝对路径。设置为false时,仅允许相对于站点根目录的路径。

默认值为false

defaultPath可选字符串属性。

指定自定义错误页面的默认路径。路径类型由defaultResponseMode属性确定。如果选择“ 文件”,则返回文件路径。如果选择ExecuteURLRedirect路径类型,则返回自定义错误页面的URL。

defaultResponseMode可选的枚举属性。

指定返回自定义错误内容的方式。

所述defaultResponseMode属性可以是以下可能的值中的一个; 默认是File

描述
File提供静态内容,例如,自定义错误的.html文件。如果responseMode设置为File,则路径值必须是文件路径。

数值是0

ExecuteURL提供动态内容,例如,自定义错误的.asp文件。如果responseMode设置为ExecuteURL,则路径值必须是服务器相对URL。

数值是1

Redirect将客户端浏览器重定向到包含自定义错误文件的其他URL。如果responseMode设置为Redirect,则路径值必须是绝对URL。

数值是2

detailedMoreInformationLink可选字符串属性。

指定页面底部显示的链接,该链接包含有关特定错误的更详细信息的页面。您可以使用此属性将最终用户指向自定义位置以获取错误信息。状态,子状态,HRESULT和消息ID作为查询字符串的一部分发送。

默认值为HTTP status code overview - Internet Information Services | Microsoft Learn。

errorMode可选的枚举属性。

指定是否启用HTTP错误。

所述errorMode属性可以是以下值中的一个; 默认是DetailedLocalOnly

描述
DetailedLocalOnly如果请求来自本地计算机,则返回详细的错误信息,如果请求来自外部计算机,则返回自定义错误消息。

数值是0

Custom用您指定的自定义页面替换模块或服务器生成的错误。此模式可用于向最终用户提供更友好的错误消息。

注意:此设置会关闭详细错误,即使对于本地请求也是如此。

数值是1

Detailed将详细的错误信息发送回客户端。此模式对于测试和调试网站和应用程序非常有用。

数值是2

existingResponse可选的枚举属性。

指定当HTTP状态代码是错误的,即响应代码> = 400会发生什么情况的现有响应

existingResponse属性可以是以下值中的一个; 默认是Auto

描述
Auto仅在设置了SetStatus标志时才保持响应不变。

数值是0

Replace即使设置了SetStatus标志,也会替换现有响应。

数值是1

PassThrough如果存在现有响应,则保持响应不变。

数值是2

子元素

元件描述
error可选元素。

向HTTP错误集合添加HTTP错误。

remove可选元素。

从HTTP错误集合中删除对HTTP错误的引用。

clear可选元素。

从HTTP错误集合中删除对HTTP错误的所有引用。

6.3、配置示例

以下配置示例(如果包含在Web站点或应用程序的Web.config文件中)使用errorMode属性仅允许在本地计算机上显示详细的错误消息。它还使用defaultResponseMode属性来设置站点或应用程序的响应模式。然后,该示例删除500状态代码的继承错误消息。接下来,它将prefixLanguageFilePath属性设置为IIS应搜索新自定义错误页面的目录,并将path属性设置为500.htm,即包含自定义错误消息的文件。

<configuration><system.webServer><httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" ><remove statusCode="500" /><error statusCode="500"prefixLanguageFilePath="C:\Contoso\Content\errors"path="500.htm" /></httpErrors></system.webServer>
</configuration>


七、参考:

深入解析asp.net中mvc4自定义404页面(分享) - 双恒网络-免费PHP网站源码模板,插件软件资源分享平台!

iis7设置404,使用web.config配置404,HTTP错误httpErrors模块-豫章小站

web,mvc,ASP.NET设置404错误页面,c#_c# mvc自定义404-CSDN博客

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

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

相关文章

【从零开始的rust web开发之路 三】orm框架sea-orm入门使用教程

【从零开始的rust web开发之路 三】orm框架sea-orm入门使用教程 文章目录 前言一、引入依赖二、创建数据库连接简单链接连接选项开启日志调试 三、生成实体安装sea-orm-cli创建数据库表使用sea-orm-cli命令生成实体文件代码 四、增删改查实现新增数据主键查找条件查找查找用户名…

docker-从docker安装到在docker环境中编译程序全流程

1、docker安装 参考&#xff1a;https://blog.csdn.net/weixin_74855005/article/details/135510702 2、基础镜像拉取 以/home/mdj/tools/aarch64-focal为例。 build.bash中的以下命令用来拉arm的ros-noetic镜像&#xff0c;–platform指定操作系统 ros:noetic为基础镜像。 do…

2024.1.31日总结

服创大赛的有一个选题是【A16】新苗同学 - 大学新生智能迎新平台&#xff0c;这个对前端的要求挺高的&#xff0c;需要设计游戏化页面&#xff0c;刚刚搜索了一下&#xff0c;感觉难度很大&#xff0c;又要有创意&#xff0c;而且动画效果也要不错&#xff0c;整体页面才会美观…

爬虫学习笔记-Cookie登录古诗文网

1.导包请求 import requests 2.获取古诗文网登录接口 url https://so.gushiwen.cn/user/login.aspxfromhttp%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx # 请求头 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like …

kylin启动memcached缓存

当部署kylin的机器内存不足时&#xff0c;可以使用memcached作为kylin的查询缓存。 需要在kylin.properties添加的配置如下&#xff1a; kylin.query.cache-enabledtrue kylin.query.lazy-query-enabledtrue kylin.query.cache-signature-enabledtrue kylin.query.segment-ca…

linux解决访问/下载github连接超时或下载慢的问题

问题 我这里是树莓派从github下载资源出现无法连接&#xff0c;连接超时的问题&#xff0c;如下所示解决方式 修改/etc/hosts文件 例&#xff1a; sudo nano /etc/hosts #添加如下 192.30.255.112 github.com git 185.31.16.184 github.global.ssl.fastly.net这里以树莓派为…

【大厂AI课学习笔记】1.3 人工智能产业发展(4)——泛在的人工智能

人工智能走向泛在。 泛在&#xff0c;就是广泛存在。&#xff08;下图来自腾讯AI课。&#xff09; 没办法&#xff0c;被百度抛弃了&#xff0c;想学习&#xff0c;课程打不开&#xff0c;只好投想腾讯的怀抱。 之前考过腾讯云的认证&#xff0c;课程做的还是条理很清晰。 主…

全面掌握Django的web框架Django Rest_Framework(一)

文章目录 Django Rest_Framework1. DRF介绍2.DRF特点3.环境安装与配置&#xff08;1&#xff09;DRF需要以下依赖&#xff08;2&#xff09;创建django项目 4.序列化器的使用&#xff08;1&#xff09;创建序列化器 5. 反序列化器使用 Django Rest_Framework 1. DRF介绍 Djan…

PPT、PDF全文档翻译相关产品调研笔记

主要找一下是否有比较给力的全文档翻译 文章目录 1 百度翻译2 小牛翻译3 腾讯交互翻译4 DeepL5 languagex6 云译科技7 快翻:qtrans8 simplifyai9 officetranslator10 火山引擎翻译-无文档翻译1 百度翻译 地址: https://fanyi.baidu.com/ 配套的比较完善,对于不同行业也有区…

中移(苏州)软件技术有限公司面试问题与解答(7)—— kmalloc与vmalloc的区别与联系及使用场景

接前一篇文章&#xff1a;中移&#xff08;苏州&#xff09;软件技术有限公司面试问题与解答&#xff08;0&#xff09;—— 面试感悟与问题记录 本文参考以下文章&#xff1a; kmalloc与vmalloc如何选择 Vmalloc与kmalloc的区别 特此致谢&#xff01; 本文对于中移&#xf…

docker安装elasticsearch+kibana

目录 1.安装es 2.安装kibana 3.kibana监控es 1.安装es 拉取镜像 docker pull elasticsearch:7.6.1 创建存放配置文件、数据、插件的各个文件夹 mkdir -p /home/docker/elasticsearch/config mkdir -p /home/docker/elasticsearch/data mkdir -p /home/docker/elasticsearch…

防火墙目标NAT

目录 拓扑需求 目标NAT配置配置配置服务器映射电信&#xff08;DX&#xff09;移动&#xff08;YD&#xff09; 配置NAT策略配置目的端口转换 新建安全策略 测试 拓扑 需求 分公司设备可以通过总公司的移动链路和电信链路访问到DMZ区的http服务器 目标NAT配置 这里主要配置目标…

FFMPEG 之 DXVA2 硬解

一&#xff1a;FFMPEG 支持的硬解方式有很多&#xff1a; DXVA2、D3D11VA、CUDA、QSV、OPENCL、DRM、VAAPI、VDPAU、VIDEOTOOLBOX、MEDIACODEC。 有的支持 Windows 平台&#xff0c;有的支持 linux 平台&#xff0c;有的支持 apple ios 平台&#xff0c;…

IP路由基础

什么是路由转发 网关或者路由器根据收到的IP报文其目的地址选择一条合适的路径&#xff0c;并将报文转发到下一个路由器。在路径中的最后一跳路由器二层寻址报文转发给目的主机。 路由中包含的有哪些信息 目的网络掩码出接口下一跳 路由表发现路由的获取方式 直连路由&…

react经验10:与jquery配合使用

应用场景 老web项目进行react改造&#xff0c;为了节省时间&#xff0c;部分jquery组件仍然保留。 案例1 使用bootstrapTable组件。 node_modules准备 jquery、bootstrap、bootstrap-table 如果需要typescript&#xff0c;则额外追加 types/bootstrap、types/jquery 以上都…

《zdppy_aocrud官方教程》 08 自动生成根据ID列表删除接口

08 自动生成根据ID列表删除接口 《zdppy_aocrud官方教程》 08 自动生成根据ID列表删除接口 生成方法 服务端 import aocrud import env import orm from api import Api, respenv.load("../.env")db, BaseModel orm.get_mysql_pool_base_model_by_env()class Us…

上班族学习方法系列文章目录

上班族学习方法系列文章目录 文章目录 上班族学习方法系列文章目录前言一、时间管理二、答题实战 前言 上班族如果想提高自己&#xff0c;那么就得掌握有效的学习方法和良好的时间管理。 一、时间管理 上班族有家有业&#xff0c;考证或者提高学历备考时间不充分。需要学会精…

Mybatis 源码系列:领略设计模式在 Mybatis 其中的应用

文章目录 一、Builder模式二、工厂模式三、单例模式四、代理模式五、组合模式六、模板方式模式七、适配器模式八、装饰器模式九、迭代器模式 虽然我们都知道有23种设计模式&#xff0c;但是大多停留在概念层面&#xff0c;真实开发中很少遇到&#xff0c;Mybatis源码中使用了大…

LeetCode 第22天

235. 二叉搜索树的最近公共祖先 普通二叉树的最近公共祖先方法通用&#xff0c;但是涉及到二叉排序树的特性&#xff0c;就需要记得遍历得到的最近的一个值在p q值之间的结点&#xff0c;这个就是目标的公共祖先结点。这题算是写的比较透的了&#xff0c;用了三种方法。 class…

Flink 集成和使用 Hive Metastore

1. AWS EMR 的 Flink 使用 Hive Metastore 想在 Flink 中使用 Hive Metastore 其实只需要将 Flink Hive Connector 以及 Hive Metastore 有关的 Jar 包部署到 ${FLINK_HOME}/lib 下即可&#xff0c;稍后我们会介绍一下具体做法。但是&#xff0c;如果是 AWS EMR&#xff0c;会有…