2014-02-07 17 views
4

我試圖將PDF文件上傳到我的WebAPI方法,但我收到415 Unsupported Media Type錯誤。我是否需要在WebApiConfig.cs文件中添加特定內容以允許PDF格式化程序?將Fiddler中的PDF文件上傳到WebAPI方法導致415不支持的媒體類型

下面是我的控制器代碼簽名:

[HttpPost] 
     public HttpResponseMessage SavePdf(HttpPostedFileBase file) 
     { 
      string fileLocation = @"\\server\shared\appname\"; 
      ... 

我的WebAPI目前託管在localhost。我從Fiddler調用這個WebAPI方法。這裏的提琴手的「作曲家」選項卡(我然後點擊藍色上傳文件的鏈接上傳我的PDF):

enter image description here

下面是導致HTTP 415錯誤小提琴手:

enter image description here

我的直覺是我需要以某種方式告訴我的WebAPI接受PDF媒體類型(application/pdf),但我不確定...有什麼想法?

+0

您如何閱讀Web Api控制器中的請求內容?檢查這個artcile:http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2 –

+0

@KiranChalla它甚至從來沒有進入'SavePdf' - 我在第一個花括號中設置了一個斷點,所以要回答你的問題,它甚至從來沒有達到過這一點。這就是爲什麼我的直覺是我需要給WebApiConfig.cs添加一些東西,但我確定。 –

+0

哦,等待...不要使用'HttpPostedFileBase' ..這是在MVC中使用..而只是沒有任何參數,只是按照我上面提到的文章。 –

回答

3

這意味着該文件格式是不是在你的global.asax配置預期的媒體格式:

var config = System.Web.Http.GlobalConfiguration.Configuration; 
config.Formatters.Insert(0, new System.Net.Http.Formatting.JsonMediaTypeFormatter()); 

可以兩件事情,一個是實現你的meadia格式接受文件,也可以調整一個控制器接受他們這樣的:

public class UploadController : ApiController 
{ 
    public async Task <HttpResponseMessage> PostFormData() 
    { 
     var root = HttpContext.Current.Server.MapPath("~/App_Data"); 
     var provider = new MultipartFormDataStreamProvider(root); 

     try 
     { 
      // Read the form data. 
      await Request.Content.ReadAsMultipartAsync(provider); 

      // Show all the key-value pairs. 
      foreach(var key in provider.FormData.AllKeys) 
      { 
       foreach(var val in provider.FormData.GetValues(key)) 
       { 
        var keyValue = string.Format("{0}: {1}", key, val); 
       } 
      } 

      foreach(MultipartFileData fileData in provider.FileData) 
      { 
       var fileName = fileData.Headers.ContentDisposition.FileName; 
      } 
      return Request.CreateResponse(HttpStatusCode.OK); 
     } 
     catch (Exception e) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); 
     } 
    } 
} 
... 

你可以閱讀更多關於它在這裏:

3

你可以按照下面的這篇文章:
http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2

爲Web API試圖模型綁定使用存在於配置格式化的要求內容,不要使用HttpPostedFileBase作爲參數... Web API在內部沒有用於多部分的格式化程序...您需要以特定的方式讀取多部分請求內容......還有來自MVC的HttpPostedFileBase

關於文件名,你可以看看上面這篇文章中的這一行file.Headers.ContentDisposition.FileName

相關問題