1

411 Length Required 要求は、要求されたリソースに必要なコンテンツの長さを指定しませんでした。

次のコードがあります。

    [HttpPost]
    [Route("UploadFileAsync/{RequestID}")]
    public async Task<HttpResponseMessage> UploadFileAsync(int RequestID)
    {
        SetUser();
        long maxAllowedFileSize = 9999999;


        long? contentLenght = Request.Content.Headers.ContentLength;

        if (!contentLenght.HasValue || contentLenght.Value > maxAllowedFileSize)
        {
            return Request.CreateErrorResponse(HttpStatusCode.LengthRequired, "Please set content lenght and file size should be less than 10 Mb");
        }

リクエストのサイズが 9999999 を超えると動作し、411 ステータス コードを返します。

しかし、リクエスト全体をサーバーにアップロードする前に検証したいと思います(私が理解しているように、サーバーが処理できない場合に大きなファイルのアップロードを防ぐためのこの411ステータスコードの意味)。リクエスト全体をサーバーに送信する前に、リクエストを拒否して 411 ステータス コードを送信するにはどうすればよいですか?

4

1 に答える 1

1

要求を Web API に送信する前にサイズを検証する場合は、Web API クライアント レベルで行う必要があります。
ただし、Web API コントローラーのアクションが実行される前に検証を実行する場合は、アクション フィルターを使用できます。通常、次の手順が必要です。

  • クラスを継承して、Web API のカスタム アクション フィルターを作成します ActionFilterAttribute
  • メソッドをオーバーライド OnActionExecutingして、コンテンツの長さをチェックし、メソッド定義内で適切なエラー コードを返すコードを記述します。
  • カスタムフィルターをWebApiConfig ファイルに登録します。
  • このフィルターを適用するアクションをカスタム属性で装飾します

ステップバイステップの実装については、このリンクを参照してください。

于 2016-03-18T04:59:15.857 に答える