web.config中的httperrors

时间:2011-11-28 08:40:09

标签: asp.net-mvc-3 razor

我正在尝试使用简单的html页面,当503服务无法使用时出现错误。

我在web.config的system.webservers

中使用
<httpErrors errorMode="Custom">
  <remove statuscode="503" substatuscode="-1">
  <error statuscode="503" responseMode="File" path="Views/Shared/IISError.htm">
</httpErrors>

这不行。我停止申请时仍然会收到IIS默认页面。

我正在使用mvc3,razor应用程序。

4 个答案:

答案 0 :(得分:7)

我花了一段时间来弄清楚这一点......但我认为这可能会对你有所帮助:

首先,要在IIS 7中配置错误,您需要使用以下部分进行配置:

  <system.webServer>
    <httpErrors existingResponse="Replace" defaultResponseMode="Redirect" errorMode="Custom">
      <remove statusCode="503"/>
      <error statusCode="503" responseMode="Redirect" path="Views/Shared/IISError.htm"/>          
    </httpErrors>
  </system.webServer>

此配置有效,但是您可能会收到错误消息,指出您无法覆盖httpErrors部分,如果是这种情况,请按照以下步骤操作:

  1. 打开C:\Windows\System32\inetsrv\config\applicationHost.config

  2. 变化:

    <section name="httpErrors" overrideModeDefault="Deny" />
    

    要:

    <section name="httpErrors" overrideModeDefault="Allow" />
    

答案 1 :(得分:2)

问题是,您使用的是VisualStudio开发服务器还是IIS7 Express?

如果您使用的是Cassini(VSDS),那么您应该尝试使用

<customErrors mode="On" >
  <error statusCode="503" redirect="/Views/Shared/Error.htm"/>
</customErrors>

因为httpErrors是一个仅由IIS7处理的新结构。您可以在What is the difference between customErrors and httpErrors?找到更多信息 和http://www.iis.net/ConfigReference/system.webServer/httpErrors

答案 2 :(得分:1)

根据您的一条评论,您似乎停止了应用池。

如果要停止应用程序池,则无法在web.config中设置自定义错误。您需要在IIS中执行此操作。

答案 3 :(得分:1)

在Mvc 5.1.1和IIS 7.5中,需要使用反斜杠来指示文件响应模式的子文件夹。

C#:

[HttpGet]
[AllowAnonymous]
public ActionResult Login()
{
    try
    {
        var allowLogin = false;

        if(allowLogin == false)
            return new HttpStatusCodeResult(403);
    }
}

的Web.config:

<system.web>
  <!--customErrors tag is not required -->
</system.web>
<httpErrors errorMode="Custom" existingResponse="Replace" defaultResponseMode="File" >
  <remove statusCode="400" subStatusCode="-1" />
  <remove statusCode="401" subStatusCode="-1" />
  <remove statusCode="403" subStatusCode="6" />
  <remove statusCode="403" subStatusCode="-1" />
  <remove statusCode="503" subStatusCode="-1" />
  <remove statusCode="500" subStatusCode="-1" />
  <clear/>
  <error statusCode="400" subStatusCode="-1" path="ErrorPages\400.html" />
  <error statusCode="401" subStatusCode="-1" path="ErrorPages\401.html" />
  <error statusCode="403" subStatusCode="6"  path="ErrorPages\Restrict.html" />
  <error statusCode="403" subStatusCode="-1" path="ErrorPages\403.html" />
  <error statusCode="503" subStatusCode="-1" path="ErrorPages\503.html" />
  <error statusCode="500" subStatusCode="-1" path="ErrorPages\500.html" />
</httpErrors>