2016-05-02 11 views
0

メソッドにHttpPostとして画像をアップロードしたいとします。Microsoft Web APIファイルをPostメソッドにアップロード

Iは、次のコードを試みた:

[HttpPost] 
    public HttpResponseMessage Image(int id) 
    { 
     var httpRequest = HttpContext.Current.Request; 
     if (httpRequest.Files.Count == 1) //do something 
     return Request.CreateResponse(HttpStatusCode.Created); 
    } 

は、私は郵便配達を使用して、本体にバイナリとして画像を追加しました。

しかしhttpRequest.Files.Countは0

私は間違って何をやっているのですか?

答えて

0

これを上記のコードで試してください。 をテストしやすいGoogle Chromeのレストクライアントで

てみてください..私はそれが詳細はこのTutorial

+0

私は関連/マルチパートにContent-typeを設定し、それはまだ文句を言わないif文を渡しますか? –

+0

コンテンツタイプは "Content-Type:application/x-www-form-urlencoded"でなければなりません "[添付画像参照](http://i.stack.imgur.com/Z3jfv.png)を参照してください" –

0

をチェックするためにあなたがあなたのContent-Typeがマルチパートであることを確認する必要があり、あなたに

public async Task<HttpResponseMessage> Image(int id) 
{ 
    string filepath = @"e:\testing\file"; 
    if (Request.Content.IsMimeMultipartContent()) 
    { 
     var streamProvider = new MultipartFormDataStreamProvider(filepath); 
     await Request.Content.ReadAsMultipartAsync(streamProvider); 
     foreach (MultipartFileData fileData in streamProvider.FileData) 
     { 
      if (string.IsNullOrEmpty(fileData.Headers.ContentDisposition.FileName)) 
     { 
      return Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted"); 
     } 
     string fileName = fileData.Headers.ContentDisposition.FileName; 
     if (fileName.StartsWith("\"") && fileName.EndsWith("\"")) 
     { 
      fileName = fileName.Trim('"'); 
     } 
     if (fileName.Contains(@"/") || fileName.Contains(@"\")) 
     { 
      fileName = Path.GetFileName(fileName); 
     } 
     File.Move(fileData.LocalFileName, Path.Combine(filepath, fileName)); 
    } 
    return Request.CreateResponse(HttpStatusCode.OK); 
} 

を助けることを願って/ form-dataと、適切な境界線の両方を指定します(データ部分のアプリケーション/オクテットストリーム)。質問にあなたの要求のヘッダー/本文を追加することも役に立ちます。

この1つは私の作品:

Header: 
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrhNuQUPgZKD8RxKq 

Payload: 
------WebKitFormBoundaryrhNuQUPgZKD8RxKq 
Content-Disposition: form-data; name="filename"; filename="filename.txt" 
Content-Type: application/octet-stream 


------WebKitFormBoundaryrhNuQUPgZKD8RxKq-- 
関連する問題