В соответствии с этой статьей ASP.NET - Model Validation я должен получить хорошее описание ошибок, возникающих при привязке модели, на основе аннотаций данных в моей модели. Ну, хотя проверка работает, она не дает мне приятных ошибок, а скорее ошибок JSON-анализа.Вопрос о проверке модели веб-API
Вот моя модель:
public class SimplePoint
{
[Required(ErrorMessage="MonitorKey is a required data field of SimplePoint.")]
public Guid MonitorKey { get; set; }
public int Data { get; set; }
}
Вот мой проверки фильтра:
public class ModelValidationFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid == false)
{
actionContext.Response = actionContext.Request
.CreateErrorResponse(HttpStatusCode.BadRequest,
actionContext.ModelState);
}
}
}
мне пришлось удалить InvalidModelValidationProvider, как указано в этом сообщении: ASP.NET - Issue - этот код exixts в Global.asax Application_Start метод:
GlobalConfiguration.Configuration.Services.RemoveAll(
typeof (System.Web.Http.Validation.ModelValidatorProvider),
v => v is InvalidModelValidatorProvider);
Это мой запрос, используя Скрипач:
POST http://localhost:63518/api/simplepoint HTTP/1.1
User-Agent: Fiddler
Host: localhost:63518
Content-Length: 28
Content-Type: application/json; charset=utf-8
{"MonitorKey":"","data":123}
И вот мой ответ от моего контроллера:
HTTP/1.1 400 Bad Request
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcTG9jYWwgVmlzdWFsIFN0dWRpbyBwcm9qZWN0c1xKaXREYXNoYm9hcmRcSml0RGFzaGJvYXJkLldlYi5Nb25pdG9 ySG9zdFxhcGlcc2ltcGxlcG9pbnQ=?=
X-Powered-By: ASP.NET
Date: Fri, 22 Mar 2013 21:55:35 GMT
Content-Length: 165
{"Message":"The request is invalid.","ModelState":{"data.MonitorKey":["Error converting value \"\" to type 'System.Guid'. Path 'MonitorKey', line 1, position 16."]}}
Почему я не получаю сообщение об ошибке идентифицированный в моей аннотации данных (т.е. «MonitorKey - это обязательное поле данных SimplePoint»)? Анализируя ModelState в моем фильтре проверки, я не вижу, что ErrorMessage подхватывается модулем проверки модели.
Измените свойство модели на строку. Мои ставки - результат, который будет таким, каким вы ожидали. – LiverpoolsNumber9