web-dev-qa-db-ja.com

WebAPI-OnActionExecutingフィルターから直接Webパイプラインを停止する方法

ModelState.IsValidをチェックするアクション前のWebAPIフックがあります。 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);
    }
}
16
George Mauer

response.Resultを設定します。結果がnullでない場合、アクションは実行されません。正確な構文は今私を逃れていますが、それは同じくらい簡単です

if(actionContext.ModelState.IsValid == false)
{
       var response = actionContext.Request.CreateErrorResponse(...);
       actionContext.Response = response;
}   
35
Jason Meckley

ASP.NET WebApiページで実際に例を見たことがありますか?

あなたが達成しようとしていることと非常によく似ており、彼らが行うのはContextオブジェクトのResponseを設定することだけです。

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

7
Joanna Derks

私の推測では、HttpResponseExceptionをスローする必要があります

2
Darrel Miller