私はユーザーがファイルをアップロードできるようにするaspxページを持っており、最大ファイルサイズを10MBに制限したいと考えています。 IIS7、.NET 3.5。私はIHttpModule
を実装するカスタムエラー処理モジュールを持っているmaxAllowedContentLengthを捕まえて処理する場所は、IIS7で超過していますか?
<location path="foo.aspx">
<system.web>
<!-- maxRequestLength: kbytes, executionTimeout:seconds -->
<httpRuntime maxRequestLength="10240" executionTimeout="120" />
<authorization>
<allow roles="customRole"/>
<!-- Deny everyone else -->
<deny users="*"/>
</authorization>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- maxAllowedContentLength: bytes -->
<requestLimits maxAllowedContentLength="10240000"/>
</requestFiltering>
</security>
<handlers accessPolicy="Read, Script">
<add name="foo" path="foo.aspx" verb="POST"
type="System.Web.UI.PageHandlerFactory"
preCondition="integratedMode" />
</handlers>
</system.webServer>
</location>
:私は私のweb.configファイルに次のように設定しています。私はmaxRequestLength
を超えると、実際にHttpApplication.Error
が発生することがわかりました。しかし、私がmaxAllowedContentLength
で遊んでいるときは、HttpApplication.Error
イベントは起こっておらず、ユーザーは404.13ページにリダイレクトされます。 Visual Studioに接続しましたが、何も投げられない最初のチャンス例外がスローされています。
私の最初の考えは、以前のイベントでヘッダーのコンテンツの長さを確認することです。これはどこで推奨/ベストプラクティスですか? PostLogRequest? EndRequest?
sunflowerpowerの回答は、管理パイプラインモードがIntegratedに設定されている場合にのみ有効です。少なくともそれが私が経験した理由です – Marvin
私はこのソリューションが認証を適切に処理しないことに気付いています。 Server.Transferを呼び出すと、HttpContext.Current.UserプロパティがNULLであるため、ターゲットページの認証チェックルーチンが失敗します。その行を引き出すことで問題が発生するため、ヘッダーをクリアすることによって発生したようには見えません。これを回避する方法はありますか?そうでなければ解決策ではありません。 – Triynko
イベントハンドラに@Triynkoのエラーコードを入れます。私はUmbracoを使用しています - それが重要であるかどうかはわかりませんが、これは「Maximum request length exceeded」例外をまだ捕まえていた唯一の場所です。私はまた、 'Response.ClearContent();' YSODを取り除く。 'Application_Error'はこの例外では発生しませんが(RequestValidationの場合も同じですが)、UserControlまたはMasterpageで 'OnError'を起動できませんでした。実際のページを見つけることができませんでした。 ;) –