2014-02-20 4 views
3

У меня есть приложение ASP.NET с помощью Web API 2.запрос POST без проверки модели передача содержимого

Чтобы заставить проверки модели на все действия, я использую фильтр, например, так:

public class ValidateModelAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     if (!actionContext.ModelState.IsValid) 
     { 
      actionContext.Response = actionContext.Request.CreateErrorResponse(
       HttpStatusCode.BadRequest, actionContext.ModelState); 
     } 
    } 
} 

Этот хорошо работает в большинстве случаев, но когда я выполняю запрос POST против конечной точки API без какого-либо контента в теле запроса, это похоже на то, что проверка модели не влезает.

Контроллер-действие принимает модель с модой три свойства - все необходимые строки.

public class AddEntityViewModel 
{ 
    [Required] 
    public string Property1 { get; set; } 
    [Required] 
    public string Property2 { get; set; } 
    [Required] 
    public string Property3 { get; set; } 
} 

Если я просто добавить некоторые случайные данные в теле запроса, проверки модели пинок и отклонить запрос, как и ожидалось, но если тело запроса полностью разряжен, проходит проверку модель и модель я получаю в моем действии нулевой.

Есть ли хороший способ принудительного подтверждения модели, даже если тело запроса пуст, чтобы такие запросы были лишены? Или есть какой-то другой способ приблизиться к этому?

+0

Показать код вашей модели –

+2

@SergeyLitvinov Done! –

+0

Только что нашел [этот вопрос SO] (http://stackoverflow.com/questions/19851352/mvc5-webapi2-modelstate-is-valid-with-null-model), который касается одной и той же проблемы, поэтому я голосую чтобы закрыть этот вопрос. –

ответ

2

Что я в итоге сделал, это расширение моего фильтра проверки модели, чтобы также проверить, что модель не равна нулю.

public class ValidateModelAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     if (!actionContext.ModelState.IsValid) 
     { 
      actionContext.Response = actionContext.Request.CreateErrorResponse(
       HttpStatusCode.BadRequest, actionContext.ModelState); 
     } 
     else if (actionContext.ActionArguments.ContainsValue(null))    
     { 
      actionContext.Response = actionContext.Request.CreateErrorResponse(
       HttpStatusCode.BadRequest, "Request body cannot be empty"); 
     } 
    } 
} 
Смежные вопросы