asp.net-web-api - MVC Web Api CamelCase PropertyName 不适用于 BadRequest

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

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

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

我的 Controller 中最上面的几行是

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

以下是我的模型被传递到 Controller

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

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

当我的模型被序列化回客户端时,UserName 和 Email 没有正确地驼峰式命名

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 设置可以解决这个问题,但事实并非如此。任何人都知道为什么 modelstate 在序列化回来时没有正确驼峰化?

最佳答案

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

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

关于asp.net-web-api - MVC Web Api CamelCase PropertyName 不适用于 BadRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23571645/

相关文章:

angularjs - 浏览器后退按钮上的 CORS 错误

c# - C#中[FromBody]属性的作用是什么?

Angular 4 - HttpClient - Cors - Windows 身份验证

c# - 添加新组件会删除所有组件的现有注册

c# - ASP.NET MVC WebApi 2 通过 token 登录 : how to differentiate return codes?

c# - 具有传统映射路由的属性路由有意义吗

c# - 如何在 ASP.NET Web API 中执行异步 'fire and forget' 操作

c# - ASP.NET Core API 发送用双引号引起来的字符串

c# - 如何引用 Route 和 ResponseType 属性?

asp.net-mvc - Web API – 使用不记名 token 进行身份验证