我在多个地方见过
[以及之前的问题] How can I make a custom error page in ASP.NET web-pages with WebMatrix?
如何设置web.config文件以强制给定状态代码的自定义错误页面(我认为我唯一关心的是“500”和“404”)。
我将其用作web.config XML中的<system.web>
元素。
<system.web>
<compilation debug="true" targetFramework="4.0"><assemblies><add assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /></assemblies></compilation>
<customErrors mode="On">
<error statusCode="500" redirect="~/Error.cshtml" />
<error statusCode="404" redirect="~/Error404.cshtml" />
</customErrors>
</system.web>
状态代码的自定义错误页面“500”可以正常处理正常的服务器端错误,但出于某种原因,无论我做什么,我似乎无法获取状态的自定义错误页面例如,如果在页面上点击了断开的链接,则显示代码“404”。相反,它只显示正常的“404,资源未找到”默认页面。
我还尝试更改<error>
标签的顺序(不是应该帮助,但正如您所看到的,我没有合理的事情可以尝试,LOL)
我是否误解了这一切是如何工作的,或者我只是以某种方式弄错了配置/语法?
-------------------------------- UPDATE ----------- -----------------------------
好吧,显然,如果正常链接被破坏,我的自定义404页面就会起作用,但是,我有.cs
文件,其中包含某些html生成方法。
在单个辅助页面上,这将是它的全部内容:
@Html.Raw(ContentGenerator.Generate("CityCouncil"))
页面上显示的内容的值来自数据库,在添加到字符串时进行编码,然后写入页面。如果C#字符串包含断开的链接,则默认错误页面不会显示。为什么这会有所作为?我的猜测是,这是一个时间问题,并且当C#将HTML写入页面时,web.config文件不再能够影响此链接或其他内容。
还有什么方法可以为这些链接实现默认错误页面吗?
答案 0 :(得分:1)
customErrors
下的web.config中的system.web
条目适用于我们已建立的具有文件扩展名的网址。但要使用无扩展名网址,您需要通过向web.config中的system.webServer
节点添加条目来覆盖IIS:
<system.webServer>
<httpErrors existingResponse="Replace" errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath=""
path="/Error404.cshtml" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
完成此操作后,您还需要将任何其他自定义错误处理移至system.webServer
部分,并移除customErrors
下的system.web
条目。