kry*_*our 1 c# rest json asp.net-web-api2
我正在使用web-api 2和postman rest客户端进行测试.
我有一个方法定义,如下所示:
[Route("api/bob/user")]
[HttpPut]
public IHttpActionResult UpdateUser(User user)
Run Code Online (Sandbox Code Playgroud)
用户对象如下所示:
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; }
}
Run Code Online (Sandbox Code Playgroud)
在邮递员中我设置了一个put请求并将内容类型设置为JSON(application/json)我在body中将以下内容指定为raw:
{
"user": {"Firstname":"Bob","Lastname":"Smith"}
}
Run Code Online (Sandbox Code Playgroud)
当我发送请求时,检测到对象类型但没有填充任何属性(它们都为空),这使我相信反序列化失败.
如果我将方法签名更改为对象,则获取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});
Run Code Online (Sandbox Code Playgroud)
我还添加了测试客户端的屏幕截图:
你不应该把user财产放在前面.您的JSON应如下所示:
{
"Firstname": "Bob",
"Lastname": "Smith"
}
Run Code Online (Sandbox Code Playgroud)
为了使模型绑定器绑定到模型.
如果您希望使用当前的JSON,您的User模型应该是这样的
public class User {
public User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
还要确保使用application/json内容类型.
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |