c# - WebAPI POST [FromBody] 未绑定(bind)

标签 c# asp.net-web-api

我将 JSON 发送到 WebAPI Controller ,但模型上的属性未被绑定(bind)。

public void Post([FromBody] Models.Users.User model) {
    throw new Exception(model.Id.ToString());
}

原始请求如下:

POST http://diva2.local/siteapi/User HTTP/: diva2.local
Connection: keep-alive
Content-Length:: application/json, text/plain, */*
Origin: http://diva2.local
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.: application/json;charset=UTF: http://diva2.local/Users
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=: ISO-8859-1,utf-8;q=0.7,*;q=: .ASPXAUTH=4; __RequestVerificationToken=Rp_hUysjwCjmsxw2

{"Id":3,"FirstName":"DIVA2","LastName":"User1","Username":"diva1","IsApproved":true,"IsOnlineNow":true,"IsChecked":true}

我能找到的每个示例都告诉我这应该可行,但是 model.Id == null

但是,如果我将 JSON 更改为:

{User: {"Id":3,"FirstName":"DIVA2","LastName":"User1","Username":"diva1","IsApproved":true,"IsOnlineNow":true,"IsChecked":true}}

一切都正确绑定(bind)。

这似乎不正确。我想我可以接受 JObject 作为参数,并手动绑定(bind)它,但感觉上面的应该 Just Work (tm)?

更新:

我已经更改了返回模型的方法,但我仍然收到 null。

public Models.Users.User Post(Models.Users.User user) {
    return user;
}

响应:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-MiniProfiler-Ids: ["a0fab514-d725-4d8f-9021-4931dc06ec4a","fdeeb9a8-9e36-41d8-91d3-5348e880e193","c1b4cc86-d7c3-4497-8699-baac9fa79bf1"]
X-Powered-By: ASP.NET
Date: Tue, 21 May 2013 09:06:00 GMT
Content-Length: 4

null

最佳答案

您的请求中缺少 Content-Type header 。

不幸的是,即使您检查了 ModelState,我们也不会抛出任何错误信息。不过,好消息是我们即将发布的版本已修复此行为,您会看到基于 415 状态代码的响应。

Web API 需要 Content-Type header 来找出正确的格式化程序,以将正文反序列化为操作的参数。

关于c# - WebAPI POST [FromBody] 未绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16665815/

相关文章:

c# - 有没有类似数据库的序列化方法

c# - 从 RestSharp 客户端将 int 列表传递给 Web API

asp.net-mvc-4 - 无法使用 ASP.NET (MVC 4) Web API OData 预发行版加载文件或程序集 System.Net.Http,版本=4.0.0.0

c# - 如何在此 asp.NET web api 方法中检索 Ajax header ?

c# - API 路由 : Multiple operations with path

c# - PostAsJson JsonArray C# Web API

c# - 将 float[] 转换为字符串并返回 float[] - 测试失败,但我不明白为什么

c# - 从 ContinueWith 中抛出异常

c# - Visual Studio 加载项 - 将上下文菜单项添加到解决方案资源管理器

c# - 调整图像大小 gdi+ graphics .net