对象未根据 web api 的放置请求正确反序列化
Object not deserialising correctly on put request with web api
我正在使用 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; }
}
在邮递员中,我设置了一个放置请求并将内容类型设置为 JSON(application/json) 我在正文中将以下内容指定为原始:
{
"user": {"Firstname":"Bob","Lastname":"Smith"}
}
当我发送请求时,检测到对象类型但 none 的属性被填充(它们都是空的),这让我相信反序列化失败。
如果我将方法签名更改为对象,我将得到 json 字符串并可以将其反序列化为用户对象。如果可能的话,我更喜欢强类型。
我的网站api配置如下所示:
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});
我也附上测试客户端的截图:
你不应该把 user
属性 放在前面。您的 JSON 应如下所示:
{
"Firstname": "Bob",
"Lastname": "Smith"
}
为了让模型绑定器绑定到模型。
如果您希望使用当前的 JSON,您的 User
模型应该类似于
public class User {
public User User { get; set; }
}
还要确保使用 application/json
作为内容类型。
我正在使用 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; }
}
在邮递员中,我设置了一个放置请求并将内容类型设置为 JSON(application/json) 我在正文中将以下内容指定为原始:
{
"user": {"Firstname":"Bob","Lastname":"Smith"}
}
当我发送请求时,检测到对象类型但 none 的属性被填充(它们都是空的),这让我相信反序列化失败。
如果我将方法签名更改为对象,我将得到 json 字符串并可以将其反序列化为用户对象。如果可能的话,我更喜欢强类型。
我的网站api配置如下所示:
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});
我也附上测试客户端的截图:
你不应该把 user
属性 放在前面。您的 JSON 应如下所示:
{
"Firstname": "Bob",
"Lastname": "Smith"
}
为了让模型绑定器绑定到模型。
如果您希望使用当前的 JSON,您的 User
模型应该类似于
public class User {
public User User { get; set; }
}
还要确保使用 application/json
作为内容类型。