大きすぎるファイルをアップロードするときに意味のあるエラーを表示する
-
05-07-2019 - |
質問
サイトのアップロードのファイルサイズに、デフォルトのasp.netおよびiis設定のサイズ未満の固定制限を設定しました。
これをキャッチするApplication_BeginRequestに単純なキャッチセットアップがあります(他のすべてのフォームデータを含むContentLengthをチェックするため、excatではありませんが、十分です)。 ユーザーがアップロードしようとしたページの処理を再開するか、フォールバック計画としてユーザーをページにリダイレクトし、ファイルサイズが大きすぎることを説明します(これを説明する字幕が既にありますが、ユーザーは知っています-'悪臭を放つ字幕を読む必要はありません」)。
では、問題は何ですか?さて、私の応答はすでにユーザーに送信されているようです-ページが見つからなかったことを説明する404。私はこの動作が望ましくない、私はこの応答をフラッシュしたい、それはユーザーが見たいものではないので-私は何か他のものを表示したい-私自身の応答を作成し、リダイレクトするか、彼らが得るはずのページを処理するとにかく。
ファイルはIISが必要とするものよりも大きいため、IISがリクエスト/投稿を拒否していることは問題であると思われます。私は本当にこれを掘ります-20megの画像をアップロードしようとする気違いのユーザーは、IISをひざまずくDoSを許可されるべきではありませんが、これですか?または、ユーザーへのこの応答を傍受する機会がありますか?IISの最大サイズを増やしてこのファイルの受信に帯域幅を費やすのではなく、この投稿を「大きすぎる」と適切な応答を送信したいだけですユーザーに戻ります。
解決
これと同じ問題があり、多くの検索を行った後、これに対する完璧な解決策はないようです。 [最大要求長]を変更して、IISがASP.Netエラーを処理するポイントを設定できます。 global.asaxでこのエラーをキャッチし、ユーザーにもっとわかりやすいエラーページを表示することもできます。
これを行う方法の詳細については、 http://www.developerをご覧ください。 com / db / article.php / 10920_3426051_2
他のヒント
優れたリソース!
上記のリンクを使用して、サーバーにアップロードされたファイルが大きすぎてデフォルトのエラーページにリダイレクトされる場合にキャッチを実装しました
web.config->
< customErrors mode="RemoteOnly" defaultRedirect="~/GenericError.htm" />
MyPage.aspx.cs-&gt;
protected void Page_Error(object sender, EventArgs e)
{
if (HttpContext.Current.Error is HttpException)
if ((HttpContext.Current.Error as HttpException).ErrorCode == -2147467259)
{
Server.ClearError();
Response.Redirect(@"~/FileSizeError.htm", false);
}
}
上記の回答は、IIS 7.5では機能しませんでした。私たちはついに次のことを思いつきました:
void Application_PreSendRequestHeaders(Object sender, EventArgs e)
{
if (
Request.Headers["Content-Length"] != null &&
int.Parse(Request.Headers["Content-Length"]) > 150000000 &&
Request.RawUrl.EndsWith("/Release/ProjectReleases.aspx?Mode=Create"))
{
try
{
Response.Redirect("http://anyurl", true);
}
catch (HttpException ex)
{
if (ex.Message == "Maximum request length exceeded.")
{
Server.ClearError();
Response.ClearHeaders();
Response.Redirect("http://www.edward-williams.com", true);
}
}
}
}
最大アップロードサイズを変更する必要はありませんでした。最終バージョンにweb.configの値に基づいて最大アップロードサイズの静的な値を実際に設定し、カスタムエラーページとそのホームページにリダイレクトしましたが、アイデアは得られました。