Проверка ASP.NET MVC возвращает имя свойства в нижнем регистре - PullRequest
0 голосов
/ 19 декабря 2018

В моем веб-приложении ASP.NET MVC Core для сериализации свойств Json задан верблюжий регистр (с первой строчной буквой):

services.AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
    .AddJsonOptions(opt =>
    {
        opt.SerializerSettings.ContractResolver = new DefaultContractResolver { NamingStrategy = new CamelCaseNamingStrategy() };
        opt.SerializerSettings.Converters.Add(new StringEnumConverter(true));
    });

Сериализация для клиента работает, как и ожидалось.

Но когда клиент javascript пытается опубликовать данные и эти данные недействительны, он получает сообщение проверки со свойствами заглавной буквы, это сообщения проверки ModelState:

{"Info":["The Info field is required."]}

Есть ли способ заставить ASP.NET возвращать строчное свойство в сообщениях проверки ModelState, чтобы отразить стратегию именования?

1 Ответ

0 голосов
/ 19 декабря 2018

Решение состоит в том, чтобы отключить автоматический фильтр проверки API и создать собственный результат json с сообщениями проверки:

services.Configure<ApiBehaviorOptions>(options =>
{
    options.SuppressModelStateInvalidFilter = true; 
});

И в контроллере:

protected ActionResult ValidationFailed()
{
    var errorList = ModelState.ToDictionary(
        kvp => kvp.Key.ToCamelCase(),
        kvp => kvp.Value.Errors.Select(e => e.ErrorMessage).ToArray()
    );

    return BadRequest(errorList);
}

public async Task<ActionResult> Create([FromBody]TCreateDto model)
{
    if (ModelState.IsValid == false)
    {
        return ValidationFailed();
    }

    ...
}

Метод вспомогательного ввода строки:

public static string ToCamelCase(this string name)
{
    if (string.IsNullOrEmpty(name))
    {
        return name;
    }
    return name.Substring(0, 1).ToLower() + name.Substring(1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...