Web Api - как остановить веб-конвейер непосредственно из фильтра OnActionExecuting
У меня есть веб-api-ключ для предварительного действия, который будет проверять ModelState.IsValid. Если ModelState недействителен, я не хочу выполнять действие и сразу возвращаю сообщение. Как именно я это делаю?
public class ValidateModelStateAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext) {
if (!actionContext.ModelState.IsValid)
{
var msg = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
// Now What?
}
base.OnActionExecuting(actionContext);
}
}
Ответы
Ответ 1
установите Response.Result. Если результат не равен null, он не выполнит действие. точный синтаксис ускользает от меня прямо сейчас, но он так же прост, как
if(actionContext.ModelState.IsValid == false)
{
var response = actionContext.Request.CreateErrorResponse(...);
actionContext.Response = response;
}
Ответ 2
Вы действительно видели этот пример на странице ASP.NET WebApi?
Похоже на то, что вы пытаетесь достичь, и все, что они делают, это установить ответ объекта Context:
If model validation fails, this filter returns an HTTP response that contains the validation errors. In that case, the controller action is not invoked.
http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api
см.: Handling Validation Errors
Ответ 3
Мое предположение заключается в том, что вы должны бросить исключение HttpResponseException