【问题标题】:MVC WebApi CamelCasingPropertyNames Not working on BadRequestMVC Web Api CamelCase PropertyNames 不适用于 BadRequest
【发布时间】:2014-05-11 00:26:27
【问题描述】:

我在 WebApiConfig.cs 文件中有以下内容,它适用于良好的请求

var jsonFormatter = config.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

我的控制器中的顶行是

public async Task<IHttpActionResult> ForgotPassword(ForgotPasswordBindingModel model)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
}

以下是我的模型被传递到控制器中

public class ForgotPasswordBindingModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }
}

当我的模型被序列化回客户端时,用户名和电子邮件没有正确地驼峰化

Object {message: "The request is invalid.", modelState: Object}
message: "The request is invalid."
modelState: Object
model.Email: Array[1]
0: "The Email field is not a valid e-mail address."

对象本身ModelState 似乎正确地进行了驼峰式大小写,并且当请求成功时,生成的对象正确完成,但是对于 badrequest 的 modelState 的属性似乎没有正确地驼峰式大小写。根据我的理解,modelState.model.email 应该有一个小写的“E”来表示电子邮件。我认为 Config 设置可以解决这个问题,但事实并非如此。任何人都知道为什么模型状态在序列化回来时没有正确地驼峰化?

【问题讨论】:

    标签: asp.net-web-api asp.net-web-api2


    【解决方案1】:

    这可能是因为 ModelState 是一个字典,而 CamelCaseContractResolver 只处理模型的属性。

    https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Serialization/CamelCasePropertyNamesContractResolver.cs

    【讨论】:

      猜你喜欢
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多