2013-11-22 3 views
1

При использовании ASP.NET Web Api 2 Я всегда нужно включать один и тот же код:Web Api: проверка базового контроллера

public IHttpActionResult SomeMethod1(Model1 model) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(ModelState); 
    } 
    //... 
} 

public IHttpActionResult SomeMethod2(Model2 model) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(ModelState); 
    } 
    //... 
} 

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

public class BaseController : ApiController 
{ 
    public void override SomeMethod(...) 
    { 
     if (!ModelState.IsValid) 
     { 
      // ??? 
     } 
    } 
} 

Есть ли какой-нибудь пример для проверки в базовом классе для ASP.NET Web Api?

ответ

6

Пример из asp.net

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

и добавить этот атрибут к вашим методам

[ValidateModel] 
public HttpResponseMessage SomeMethod1(Model1 model) 
+0

Вы можете также зарегистрировать фильтр действий для выполнения всех действий, без использования атрибутов. Может потребоваться проверка в OnActionExecuting, какой метод был использован (поскольку GET и DELETE обычно не получают модель). –

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