2013-03-22 5 views
1

В соответствии с этой статьей 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 подхватывается модулем проверки модели.

+0

Измените свойство модели на строку. Мои ставки - результат, который будет таким, каким вы ожидали. – LiverpoolsNumber9

ответ

1

Кажется, ответ так же прост, как сделать свойства модели нулевыми. Таким образом, они пройдут проверку подлинности JSON и проверку модели данных на основе аннотаций данных: «

public class SimplePoint 
{ 
    [Required(ErrorMessage="MonitorKey is a required data field of SimplePoint.")] 
    public Guid? MonitorKey { get; set; } 

    [Required] 
    public int? Data { get; set; } 
} 
+1

Да, у вас не может быть требуемого атрибута для свойства, отличного от нуля. A) это не имеет смысла, поскольку null = нет, и это условие никогда не может быть выполнено, и B) JSON попытается проанализировать строку в GUID перед попыткой проверки, которая не будет выполнена, если нет значения, а свойство не является обнуляемый. – Chris

Смежные вопросы