我无法将数据发布到ASP.NET WebAPI服务器。
我可以从WEBAPI服务器获取数据。但是,我无法发帖。
以下代码无法发布:
response = await client.PostAsync("api/Cars", content);
错误:
StatusCode:415,ReasonPhrase:'不支持的媒体类型',版本: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
我只需做一个简单的帖子即可获得哪些更新?
答案 0 :(得分:4)
正如@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可以接受。