1

我在多个地方见过

[这里] http://www.localwisdom.com/blog/2010/08/how-to-setup-custom-404s-for-iis-and-asp-net-through-web-config/

[和上一个问题在这里] 如何使用 WebMatrix 在 ASP.NET 网页中制作自定义错误页面?

如何设置 web.config 文件为给定的状态代码强制自定义错误页面(我认为我唯一关心的是“500”和“404”)。

我使用它作为<system.web>web.config XML 中的元素。

<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>标签的顺序(这不应该有帮助,但正如你所看到的,我没有合理的尝试,哈哈)。

我是否误解了这整件事是如何工作的,或者我只是在某种程度上弄错了配置/语法?

- - - - - - - - - - - - - - - - 更新 - - - - - - - - - ----------------------

好的,很明显,如果正常链接损坏,我的自定义 404 页面可以工作,但是,我有.cs包含某些 html 生成方法的文件。

在一个二级页面上,这将是它的全部内容:

@Html.Raw(ContentGenerator.Generate("CityCouncil"))

页面上显示的值来自数据库,在添加到字符串时进行编码,然后写入页面。如果 C# 字符串包含损坏的链接,则不会显示默认错误页面。为什么这会有所作为?我的猜测是,这是一个时间问题,当 C# 将 HTML 写入页面时,web.config 文件将不再影响这个链接或其他东西。

有没有办法仍然为这些链接实现默认错误页面?

4

1 回答 1

1

customErrors您的 web.config 中的条目system.web适用于具有我们已建立的文件扩展名的 url。system.webServer但要适用于无扩展名的 url,您需要通过在 web.config中的节点中添加一个条目来覆盖 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并删除.customErrorssystem.web

于 2013-09-11T08:14:39.647 回答