ファイルのアップロード要求をインターセプトする MVC アプリケーション用の HttpModule を作成しようとしています。
目標は、リクエストのコンテンツの長さを確認するために、送信前にリクエストをキャッチすることです。
コンテンツの長さが許可されている長さよりも大きい場合は、そのリクエストをキャンセルし、応答として空の文字列を送信する必要があります。
ユーザーがクリックしてドキュメントをアップロードすると、UploadSignedDocument アクションに対して ajax 呼び出しが行われます。
[NoCache, HttpPost, ValidateAntiForgeryToken]
public string UploadSignedDocument(int orderid, HttpPostedFileBase fileUpload)
{
try
{
var fileinfo = new FileInfo(fileUpload.FileName);
var newFileName = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss_") + fileinfo.Name;
var docPath = Path.Combine(Server.MapPath("~/Uploads/"), newFileName);
fileUpload.SaveAs(docPath);
return newFileName;
}
catch
{
return "";
}
}
次の HttpModule によってインターセプトされます。
public class UploadedFileSizeScreeningModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.EndRequest += ValidateUploadRequest;
}
public void Dispose()
{
}
private static void ValidateUploadRequest(object source, EventArgs e)
{
HttpApplication context = source as HttpApplication;
if (context.Request.HttpMethod.ToUpperInvariant() != "POST" ||
!context.Request.Path.Contains("OrderQueue/UploadSignedDocument"))
{
return;
}
var requestLengthInMB = context.Request.ContentLength / 1024 / 1024;
if (requestLengthInMB > Settings.Default.MaxFileSizeInMB)
{
// TODO: Return new response (empty string)
}
}
}
HttpHandler から呼び出し元に空の文字列を返すにはどうすればよいですか?