为什么我无法让我的网站识别WebMatrix WebPages环境中状态代码404的默认错误页面?

时间:2013-09-03 21:03:26

标签: asp.net web-config webmatrix custom-error-pages asp.net-webpages

我在多个地方见过

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

[以及之前的问题] 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文件不再能够影响此链接或其他内容。

还有什么方法可以为这些链接实现默认错误页面吗?

1 个答案:

答案 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条目。