2016-01-21 74 views
1

我無法發佈數據到ASP.NET WebAPI服務器。ASP.NET WebAPI無法發佈

我可以從WEBAPI服務器獲取數據。但是,我無法發佈。

下面的代碼失敗後:

response = await client.PostAsync("api/Cars", content); 

錯誤:

StatusCode: 415, ReasonPhrase: 'Unsupported Media Type', Version: 1.1

客戶:

[TestClass] 
public class UnitTest1 
{ 
    // http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client 
    [TestMethod] 
    public async Task TestMethod1() 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri("http://localhost:48213/"); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      // HTTP GET 
      var response = await client.GetAsync("api/Cars"); 
      if (response.IsSuccessStatusCode) 
      { 
       var result = await response.Content.ReadAsStringAsync(); 
      } 

      // HTTP POST 
      using (var content = new StringContent(@"some_value")) 
      { 
       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
       response = await client.PostAsync("api/Cars", content); 

       if (response.IsSuccessStatusCode) 
       { 
        Debug.WriteLine("Post was successful."); 
       } 
      } 
     } 

的WebAPI:

namespace FSharpWebAPI.Controllers 

open System.Web.Http 
open FSharpWebAPI.Models 

type CarsController() = 
    inherit ApiController() 

    let values = [| { Make = "Ford"; Model = "Mustang" }; { Make = "Nissan"; Model = "Titan" } |] 

    member x.Get() = values 

    member x.Post(data) = 
     ignore 

我需要做些什麼更新才能做出簡單的帖子?

+1

您的'x.Post'方法是通用的(接受泛型類型的參數'數據')並返回一個函數。看起來不像我正確的設置。 –

+0

我只是想抓住它的斷點。 –

+1

Web API將不會掛鉤它,除非它具有正確的形狀。 –

回答

4

As @Fyodor Soikin指出,Post方法是通用的('a -> 'b -> unit),ASP.NET Web API拒絕連接這些方法。

ASP.NET Web API使用約定而不是配置以便弄清楚如何路由和處理傳入請求。如果一個HTTP POST到達,它會去尋找一個名爲Post的方法(部分地),並試圖調用它。雖然你可能會爭辯說,如果一個通用的方法可以處理輸入,那麼Web API仍然可以調用它,但它不會這樣做。

你需要添加一個類型的註釋 - 例如:

member x.Post(data : Car) = 
    ignore 

這可能仍然不會是不夠的,因爲該版本的Post類型爲Car -> 'a -> unit,因此,返回值是一個通用功能。如果Web API知道如何處理,我會感到驚訝。

的原因是,ignore功能,由於Post調用函數,返回值是函數本身。

如果你想忽略輸入和返回unit,你可以簡單地這樣做:

member x.Post(data : Car) =() 

這個版本有類型Car -> unit,這是我期待的Web API會找到可以接受的。