DataMember使用WebApi时不遵守名称

时间:2017-05-08 20:30:58

标签: c# asp.net asp.net-web-api2

我在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.LastNamerequest.BadgeNumber都为空。

现在,如果我这样提出请求:

LastName=Stillwell&BadgeNumber=0000

request.LastNamerequest.BadgeNumber将具有正确的值。当我使用[DataMember(Name = "...")]last_name时,为什么没有badge_number提升我的价值?

1 个答案:

答案 0 :(得分:0)

我能够通过在Controller中返回TokenRequest来解决此问题。

[Route("Service/GetToken")]
[HttpPost]
public TokenRequest GetToken(TokenRequest request) { ... }

然后,在我的WebApiConfig.cs文件中,我添加了以下内容

var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

这将返回JSON而不是XML。请参阅:here