2017-07-13 20 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編碼的」

你的郵差屏幕截圖顯示了您上傳作爲「表格數據」

此外,您添加一個關鍵字「image01」,其中ARC示例似乎沒有發送密鑰。

如果你想使用表單數據要上傳的文件,你需要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的內容類型,然後選擇了formdata來上傳圖片。如果我在郵遞員上選擇'x-www-form-url-encoded',則沒有選項可以上傳圖片。 – Simsons

+0

編輯也顯示屏幕截圖上的內容類型 – Simsons

+0

查看我的更新。如果你想用一個鍵來使用表單數據,你需要一種不同的方法。此外,您的更新使得它顯示爲您在沒有時使用x-www上傳文件。 –

0

哼!這是非常棘手的。除了在工具中明確設置Content-Type頭之外,您正在做的都是正確的。你一定不能那樣做。無論您何時將form-data中的文件附加到該工具的Body選項卡中,郵差自動檢測到Content-Type並將其發送到您的發佈請求中。

將「」設置爲「multipart/form-data」涉及設置多個部分的邊界的複雜概念,詳細描述如下here。因此,設置Content-Type標頭明確地調整了請求。設置邊界的重要工作是由郵遞員工具自動完成的,這就是爲什麼它不希望你在這種情況下明確設置content-type。請參閱我是如何設置只Authorization頭,同時上傳我的系統上的圖像文件:

enter image description here

你甚至不需要這個Authorization頭,如果沒有你的Web服務器上的任何身份驗證。因此,在您的案例中,有效Headers選項卡應該只是空的,即根本沒有鍵值對。

注意:僅供參考,圖像文件的正確內容類型是multipart/form-data,即使您不需要在工具中明確設置它。

相關問題