8

IIS 7.0でホストされている単純なASP.NET MVC 3 Web サイトがあり、 404.13 http ステータス コードのカスタム http エラー ページを表示するのに問題があります。

Web.Configに次の構成があります

<system.web>
    <httpRuntime maxRequestLength="2048"/>
    <customErrors mode="Off"/> 
</system.web>

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
        <clear/>
        <error statusCode="404" subStatusCode="-1" path="/home/showerror" responseMode="ExecuteURL"  />
        <error statusCode="404" subStatusCode="13" path="/home/showerror" responseMode="ExecuteURL"  />
    </httpErrors>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="1048576"/>
        </requestFiltering>
    </security>
</system.webServer>

存在しないページに移動すると、エラー ページが正しく表示されます。ただし、1MB を超えるファイルをアップロードすると、空の 404 応答が表示されます。URL は実行されません。responseModeRedirectに変更すると、ユーザーは正しくリダイレ​​クトされます。

4

2 に答える 2

3

構成システムのロック機能が原因で、カスタムエラーが表示されない可能性があります。次のコマンドを試して、ロックを解除してください。

%windir%\System32\inetsrv\appcmd unlock config -section:system.webserver/httperrors

RequestFiltersページとCustomErrorページを数日間試した後、ようやくうまくいきました。

于 2012-08-10T22:47:02.773 に答える
1

統合モードのIIS7.5でも同じ問題が発生しました。

最終的に、web.configメソッドでエラーを処理することをあきらめ、代わりにエラーの検出と処理をApplication_EndRequestに移動しました。

global.asaxファイルに以下を追加します。

global.asax(MVC)がない場合は、代わりにページエラーを追加できます。

Protected Sub Application_EndRequest(ByVal sender As Object, ByVal e As System.EventArgs)

    Dim context As HttpContext = HttpContext.Current.ApplicationInstance.Context
    If Not IsNothing(context) Then

        If context.Response.StatusCode = 404 And
           context.Response.SubStatusCode = 13 Then

               context.Response.ClearHeaders()
               context.Server.Transfer("~/errors/404.13.aspx", False)
        End If

    End If
End Sub
于 2013-02-13T16:08:39.520 に答える