【发布时间】:2017-06-15 23:16:57
【问题描述】:
我在 WebApi2 服务中使用了以下类。
[DataContract()]
public class TokenRequest
{
[Required]
[DataMember(Name = "last_name")]
public String LastName { get; set; }
[Required]
[DataMember(Name = "badge_number")]
public String BadgeNumber { get; set; }
}
如您所见,该类的属性别名为 [DataMember(Name = "...")]
使用以下控制器
[Route("Service/GetToken")]
[HttpPost]
public IHttpActionResult GetToken(TokenRequest request) { ... }
我曾希望获得一个带有以下 POST 正文的 TokenRequest 对象
last_name=Stillwell&badge_number=0000
但是,request.LastName 和 request.BadgeNumber 都为空。
现在,如果我这样提出请求:
LastName=Stillwell&BadgeNumber=0000
request.LastName 和 request.BadgeNumber 将具有正确的值。当我使用 last_name 或 badge_number 时,为什么 [DataMember(Name = "...")] 没有引入我的值?
【问题讨论】:
-
@Dayan,我是。因此控制器上的
[HttpPost]属性。 -
没有看到更多很难说,但我的猜测是应用程序正在使用 Newtonsoft 库来处理它的 JSON 对象的反序列化,在这种情况下你会想要使用 JsonProperty 属性,例如 TokenRequest 类的 LastName 属性上的
[JsonProperty("last_name")]; -
@peinearydevelopment 以前(现已删除)的答案表明了这一点。然而,结果是一样的。我从请求中收到了空值。
-
您是否尝试过使用这样的 POST 正文:
{"last_name":"Stillwell","badge_number"="000"}?
标签: c# asp.net asp.net-web-api2