Вы можете использовать ActionFilter
. Это не глобально, но оно перемещает проблему из вашего тела метода в атрибут. Я понимаю, что он полностью не решает вашу проблему, но может быть лучше, чем ничего.
public class ModelStateValidationActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var modelState = actionContext.ModelState;
if (!modelState.IsValid)
actionContext.Response = actionContext.Request
.CreateErrorResponse(HttpStatusCode.BadRequest, modelState);
}
}
И в вашем контроллере:
[HttpPost]
[ModelStateValidationActionFilter]
public IHttpActionResult Post(object model)
{
}
Я считаю, что вы можете установите его и на контроллер. Я действительно не пробовал это, но в соответствии с этим он мог работать.
[ModelStateValidationActionFilter]
public class MyApiController : ApiController
{
}
EDIT:
As @Camilo Terevinto упомянул, что для Core немного отличается. Просто используйте этот ActionFilter
, если вы хотите использовать Core.
public class ModelStateValidationActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
var modelState = context.ModelState;
if (!modelState.IsValid)
context.Result = new ContentResult()
{
Content = "Modelstate not valid",
StatusCode = 400
};
base.OnActionExecuting(context);
}
}