Web Api - как остановить веб-конвейер непосредственно из фильтра OnActionExecuting - программирование
Подтвердить что ты не робот

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);
    }
}
4b9b3361

Ответ 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