2017-07-13 4 views
1

これは、blog postの後にC#Web APIを使用して画像をアップロードしています。POSTMANを経由して送信するときにHttpRequest.Filesが空です

この記事では、ARCを使用してそれを行う方法について説明し、正常に動作します。

しかし、私がPOSTMANを使用して同じことをしようとしているとき、失敗しています。

私のリクエストスナップショットです。あなたがデータを参照元記事で

enter image description here

enter image description here

+0

コントローラの外観はどうですか? x-wwwを使うと違うのですか? –

答えて

0

"X-WWW-フォームURLエンコード"

あなたのポストマンのスクリーンショットは、あなたがそれをアップロードしている示してアップロードされています"フォームデータ"として

さらに、ARCの例ではキーを送信していないように見えるキー "image01"を追加します。

フォーム・データを使用してファイルをアップロードしたい場合は、a different approachを必要とする:

// POST api/files 
public async Task<HttpResponseMessage> Post() 
{ 
    // Check if the request contains multipart/form-data. 
    if (!Request.Content.IsMimeMultipartContent()) 
    { 
     throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
    } 

    string root = HttpContext.Current.Server.MapPath("~/App_Data"); 
    var provider = new MultipartFormDataStreamProvider(root); 

    string value; 

    try 
    { 
     // Read the form data and return an async data. 
     var result = await Request.Content.ReadAsMultipartAsync(provider); 

     // This illustrates how to get the form data. 
     foreach (var key in provider.FormData.AllKeys) 
     { 
      foreach (var val in provider.FormData.GetValues(key)) 
      { 
       // return multiple value from FormData 
       if (key == "value") 
        value = val; 
      } 
     }      

     if (result.FileData.Any()) 
     {      
      // This illustrates how to get the file names for uploaded files. 
      foreach (var file in result.FileData) 
      { 
       FileInfo fileInfo = new FileInfo(file.LocalFileName); 
       if (fileInfo.Exists) 
       { 
        //do somthing with file 
       } 
      } 
     } 


     HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, value); 
     response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = files.Id })); 
     return response; 
    } 
    catch (System.Exception e) 
    { 
     return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); 
    } 
} 
+0

ヘッダーでは、コンテンツタイプをx-www-form-url-encodedと指定し、フォームデータをアップロードして画像をアップロードしました。郵便配達員に「x-www-form-url-encoded」を選択した場合、画像をアップロードするオプションはありません。 – Simsons

+0

スクリーンショットでコンテンツタイプを表示するよう編集しました – Simsons

+0

私の更新をご覧ください。フォームデータにキーを使用する場合は、別の方法が必要です。また、あなたの更新によって、x-wwwを使ってファイルをアップロードしたように見えるようになります。 –

0

Humph!これは地獄だった。ツール内でContent-Typeヘッダーを明示的に設定していることを除いて、すべて正しい処理を行っています。 でなければなりません。ツールのBodyタブにform-dataというファイルを添付すると、郵便配達員はContent-Typeを自動的に検出し、投稿要求で送信します。

Content-Typeを "multipart/form-data"に設定することは、複数の部品の境界を詳細hereとして設定するという複雑なコンセプトを伴います。したがって、Content-Typeヘッダーを設定すると、明示的に要求が抹消されます。境界を設定する重い吊り上げは、あなたがこの場合にはcontent-typeを明示的に設定することを望まない理由である郵便配達ツールによって自動的に行われます。

enter image description here

Webサーバー上の任意の認証がない場合でも、このAuthorizationヘッダーを必要としない場合があります。私のシステム上の画像ファイルをアップロードしているときに、私は唯一のAuthorizationヘッダーを設定しているかを確認してください。したがって、事実上のHeadersタブは空である必要があります。つまり、キー値のペアはまったくありません。

注:画像ファイルの正しいコンテンツタイプは、ツールで明示的に設定する必要はありませんが、multipart/form-dataです。

関連する問題