我正在使用web-api 2和postman rest客户端进行测试。
我有一个方法定义,如下所示:
[Route("api/bob/user")]
[HttpPut]
public IHttpActionResult UpdateUser(User user)
用户对象如下所示:
public class User : IUser
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}
public interface IUser
{
string Firstname { get; set; }
string Lastname { get; set; }
}
在邮递员中我设置了一个put请求并将内容类型设置为JSON(application / json)我在body中将以下内容指定为raw:
{
"user": {"Firstname":"Bob","Lastname":"Smith"}
}
当我发送请求时,检测到对象类型但没有填充任何属性(它们都为空),这使我相信反序列化失败。
如果我将方法签名更改为对象,则获取json字符串并将其反序列化为用户对象。如果可能的话,我更喜欢强打字。
我的webapiconfig看起来像这样:
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(
new MediaTypeHeaderValue("text/html"));
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{action}",
defaults: new {id = RouteParameter.Optional});
我还添加了测试客户端的屏幕截图:
答案 0 :(得分:5)
您之前不应该放置user
属性。您的JSON应该如下所示:
{
"Firstname": "Bob",
"Lastname": "Smith"
}
为了使模型绑定器绑定到模型。
如果您希望使用当前的JSON,那么User
模型应该是
public class User {
public User User { get; set; }
}
另外,请确保使用application/json
作为内容类型。