http错误无法在web.config中的localhost上运行

时间:2017-08-24 05:48:45

标签: asp.net asp.net-mvc error-handling web-config

我在webconfig中添加了以下内容。当站点托管到IIS时它可以工作,但是当我在本地运行时则不行。它给了我错误的web.config错误。

<system.webServer>
    <httpErrors errorMode="Custom"  defaultPath="ShowError.aspx" defaultResponseMode="ExecuteURL">
      <remove statusCode="404" subStatusCode="-1" />
      <remove statusCode="403" subStatusCode="-1" />
      <remove statusCode="401" subStatusCode="-1" />
      <remove statusCode="405" subStatusCode="-1" />
      <remove statusCode="406" subStatusCode="-1" />
      <remove statusCode="412" subStatusCode="-1" />
      <remove statusCode="500" subStatusCode="-1" />
      <remove statusCode="501" subStatusCode="-1" />
      <remove statusCode="502" subStatusCode="-1" />
    </httpErrors>
</system.webServer>

2 个答案:

答案 0 :(得分:0)

默认情况下会锁定defaultPath属性,从而导致500.19错误。你可以:

  1. 通过从defaultPath中删除applicationHost.config解锁defaultPath,我不建议这样做,因为您必须在每个开发人员和生产服务器上配置它。

  2. defaultResponseMode移除<httpErrors>path,并在每个responseMode上指定<error><httpErrors errorMode="Custom"> <clear /> <error statusCode="404" responseMode="ExecuteURL" path="ShowError.aspx" /> <error statusCode="403" responseMode="ExecuteURL" path="ShowError.aspx" /> <error statusCode="401" responseMode="ExecuteURL" path="ShowError.aspx" /> <error statusCode="405" responseMode="ExecuteURL" path="ShowError.aspx" /> <error statusCode="406" responseMode="ExecuteURL" path="ShowError.aspx" /> <error statusCode="412" responseMode="ExecuteURL" path="ShowError.aspx" /> <error statusCode="500" responseMode="ExecuteURL" path="ShowError.aspx" /> <error statusCode="501" responseMode="ExecuteURL" path="ShowError.aspx" /> <error statusCode="502" responseMode="ExecuteURL" path="ShowError.aspx" /> </httpErrors> ,如下所示:

    httpErrors

    单独指定每个状态代码似乎过分,但使用400时没有其他办法。我建议你添加subStatusCode="-1"(错误请求)。

  3. 一些旁注:

    1. 您可以省略-1,因为subStatusCode<clear />的默认值。

    2. 如果您要删除/替换所有默认的IIS错误页面,您也可以使用errorMode="Custom"

    3. 您可能希望在错误页面正常工作时删除errorMode="DetailedLocalOnly",因为这会隐藏开发人员的错误详细信息,从而降低调试时的工作效率。只有远程请求才会返回一个好的错误页面,这是默认值(responseMode="Replace")的作用。

    4. 如果无法让错误页面生效,请尝试urls。出于与上述相同的原因,您还希望避免在开发人员环境中使用它。

答案 1 :(得分:-1)

如果您有自定义错误页面,请尝试以下操作:

  <system.webServer>
    <httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
      <remove statusCode="403" />
      <remove statusCode="404" />
      <remove statusCode="500" />
      <error statusCode="403" responseMode="ExecuteURL" path="/Error/AccessDenied" />
      <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" />
      <error statusCode="500" responseMode="ExecuteURL" path="/Error/InternalServerError" />
    </httpErrors>

如果您想在本地设置自定义错误页面,可以将 DetailedLocalOnly 更改为自定义