Просто чтобы получить список сообщений об ошибках для каждого свойства модели, которое не прошло проверку, так, как вы хотите, как указано выше, с использованием метода расширения.то есть ModelState.ToJson()
, вам нужно создать статический класс со статической функцией ToJson(...)
.Пример кода будет выглядеть примерно так:
public static class ModelStateExtensions
{
/// <summary>
/// Reads all the error messages in a <see cref="ModelStateDictionary"/> as
/// a collection and returns a JSON <see cref="string"/> of the list.
/// </summary>
/// <param name="modelstate">Current modelstate assuming that you've checked
/// and confirmed that is Invalid using <see
/// cref="ModelStateDictionary.IsValid"/>
/// </param>
/// <returns>
/// Collection of validation errors for the model as a JSON string.
/// </returns>
public static string ToJson(this ModelStateDictionary modelstate)
{
List<string> errors = modelstate.Values
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage)
.ToList();
return JsonConvert.SerializeObject(errors);
}
}
Свойство ModelState
на каждом контроллере обычно равно ModelStateDictionary
, поэтому, если нам нужен дополнительный метод для него, это класс, который нам нуженрасширить.Вы можете узнать больше о методах расширения в C #, следуя этой Link .
Давайте теперь посмотрим, как использовать наш метод расширения в образце действия контроллера:
public IActionResult Create(UserViewModel model)
{
if(!ModelState.IsValid)
{
string json = ModelState.ToJson();
// insert code to log json to file here
return BadRequest(ModelState);
}
}