Я просто создаю webapi, используя .Net. У меня есть модель автомобиля в методе post, и одно из полей имеет обязательное свойство и тип сообщения об ошибке. Проблема в том, что когда я ничего не вхожу в это заданное поле, мое сообщение не отображается, я получил только сообщение вроде пустой строки (""). Кроме того, если у меня есть поле типа int и я ничего не вводил в этом поле, состояние модели недопустимо. Как я могу пропустить ошибки преобразования и как я могу получить правильное сообщение об ошибке, если я не введу ничего в обязательные поля? Заранее спасибо.ModelState Validation
Это мой код:
My Model:
public class Car
{
public Guid Id { get; set; }
public bool IsActive { get; set; }
[Required(ErrorMessageResourceName = "RequiredName", ErrorMessageResourceType = typeof(Car_Resources))]
public string Name { get; set; }
[Required(ErrorMessageResourceName = "RequiredNumber", ErrorMessageResourceType = typeof(Car_Resources))]
public string Number { get; set; }
}
Контроллер:
[ValidateModelAttribute]
public IHttpActionResult Post([FromBody]Car car)
{
}
ValidateModelAttribute метод:
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
var errors = new List<string>();
foreach (var state in actionContext.ModelState)
{
foreach (var error in state.Value.Errors)
{
errors.Add(error.ErrorMessage);
}
}
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, errors);
}
}
Когда вы говорите, что у вас есть только сообщение, такое как пустая строка - что произойдет, если вы используете 'ErrorMessage' вместо' ErrorMessageResourceName' - мне интересно, работает ли он, но это просто не поднимает ваше сообщение из ресурсов (Resx)? – Alex
Нет, это не работает. Я думаю, что это потому, что я не устанавливаю значение Number, например. Кроме того, ModelState пытается преобразовать поле в значение по умолчанию. Например, Id является Guid, но я получаю строку как идентификатор, а затем ModelState больше не будет действительным из-за преобразования. – CalinCosmin