2017-05-30 5 views
0

私はpostman form-data経由でデータを投稿しようとしているときに.net core APIをテストするためにpostmanを使用しています。この問題の一般的な解決策としてContent-Typeヘッダーをapplication/jsonに送信することはオンラインであるようです。 生のpostmanオプションを使用してファイルなしでリクエストを発行し、コンテンツタイプをJSON(application/json)として設定すると、このリクエストは正常にAPIに到達します。ここでPostmanファイルとjsonはContent-Typeヘッダー.netコアでも415を返します

は私のAPIがどのように見えるかです:

[HttpPost("{organization}")] 
    public IActionResult Post([FromBody] Asset asset, string organization) 
    { 
     //Api body 
     //Get files from request 
     Task uploadBlob = BlobFunctions.UploadBlobAsync(_blobContainer,Request.Form.Files[0]); 
    } 

そして、ここで失敗した郵便配達依頼が enter image description here

、その要求

enter image description here

のヘッダどのように見えるかは何ですかそうでなければ、これは機能しないのですか?

小更新

私は[FromBody]Asset assetを削除し、ちょうど

答えて

1

は、代わりに[FromBody]属性の[FromForm]属性を使用してみてくださいあなたのcontent-typeは "multipart/form-data"になります(リクエストが処理されているときにデバッグすると、application/jsonに設定してもコンテンツタイプがmultipartに変わることがわかります) 。  

しかし、あなたは、あなたが(デフォルトでJSONオブジェクトを期待する)身体から資産オブジェクトを期待するように指定して、コントローラのPOSTアクションで 。したがって、[FromBody]属性を使用したため、APIがapplication/jsonを期待している間に、リクエストのコンテンツタイプがマルチパートであるため、415を取得します。

+0

非常に説明していただきありがとうございます。私はそれをチェックし、それは働いています。 – Harry

0

は、いくつかの奇妙な理由で、私は私のコントローラの変数としてそれらのいずれかを渡すことが許されなかったことが判明したファイルを渡す場合、これが正常に動作しますしかし、私は両方の要求から取得する場合に動作します。

if (!Request.Form.ContainsKey("asset")) 
{ 
    return BadRequest("Asset cannot be empty"); 
} 
Asset asset = JsonConvert.DeserializeObject<Asset>(Request.Form.First(a => a.Key == "asset").Value); 

とファイル

var file = equest.Form.Files[0] 

これが事実であると誰かが私にこれを説明することができればappretiateだろうが、これは私の問題を解決すると思われる理由がわからないため

。あなたがフォーム - を作っていることから、私は確かに言うことはできませんが、私の推測では、その郵便配達である

[HttpPost("{organization}")] 
    public IActionResult Post([FromForm] string asset, string organization, IFormFile fileToPost) 
    { 
     //Api body 
     Asset asset = JsonConvert.DeserializeObject<Asset>(asset); 
     //Get files from request 
     Task uploadBlob = BlobFunctions.UploadBlobAsync(_blobContainer, fileToPost); 
    } 

関連する問題