2016-12-27 9 views
0

asp net core web apiコントローラアクションメソッドにファイルをアップロードします。 content-typeを "application/octet-stream"として送信しています。 StreamInputFormatterというカスタム入力フォーマッタを作成しました。 streaminputFormatterが呼び出されていますが、コントローラのアクションメソッドが呼び出されていませんか?とIamのエラーが発生するasp.netコアwebapiコントローラアクションメソッドのストリームタイプパラメータでモデルバインディングが動作しません。(カスタムストリームインプットフォーマッタでも)

"InvalidOperationException:タイムアウトがこのストリームでサポートされていません。

StreamInputFormatter:

public class StreamInputFormatter : IInputFormatter 
    { 
     public bool CanRead(InputFormatterContext context) 
     { 
      if (context == null) 
      { 
       throw new ArgumentNullException(nameof(context)); 
      } 
      var contentType = context.HttpContext.Request.ContentType; 
      if (contentType == "application/octet-stream") 
      { 
       return true; 
      } 
      return false; 
     } 

     public Task<InputFormatterResult> ReadAsync(InputFormatterContext context) 
     { 
      if (context == null) 
      { 
       throw new ArgumentNullException(nameof(context)); 
      } 


      var memoryStream = new MemoryStream(); 
      context.HttpContext.Request.Body.CopyTo(memoryStream); 

      return InputFormatterResult.SuccessAsync(memoryStream); 
     } 
    } 

コントローラのアクション・メソッド:

 [HttpPost("{documentType}")] 
     public async Task<IActionResult> CreateJob(string documentType, [FromBody]Stream template) 
     { 

     } 
+0

StreamInputFormatterはどこで使用しましたか? Startup.csのミドルウェアの場合は?コードを共有できますか? – Mehmet

+1

バイト配列で試しましたか? [FromBody] byte []テンプレート – Klinger

答えて

0

それはあなたが(いくつかの情報のため、このissueを参照)ので、あなたのサポートされていないStreamプロパティを超えるDefaultObjectValidator反復処理のこのエラーを取得している聞こえます。ストリームモデルの検証をスキップする

、あなたの設定に

 services.AddMvc(options => 
     { 
      ... 

      options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(Stream))); 
     }); 

を追加することができます。

関連する問題