仅通过少量操作即可触发ModelState验证

时间:2019-02-25 05:27:37

标签: c# asp.net asp.net-web-api

我有两个动作:

[HttpGet]
[ResponseType(typeof(GetStuffResponse))]
public IHttpActionResult GetStuff([FromUri] RequestObj1 request){}

[HttpPost]
[ResponseType(typeof(ValidateStuffResponse))]
public IHttpActionResult ValidateStuff(RequestObj2 request){}

我的请求对象是:

public class RequestObj1{
 public int UserId {get;set;}
 //Other properties
}

 public class RequestObj2{
 public int UserId {get;set;}
 //Other properties
}

我对两个操作都应用了验证过滤器:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class ValidateModelAttribute : ActionFilterAttribute
{
    #region Public Methods

    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (!actionContext.ModelState.IsValid)
        {
            actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
        }
    }

    #endregion
}

[ValidateModel]属性应用于包含这些操作的控制器级别。

现在,当我跑步时,GetStuffs会引发以下ModelState异常,而ValidateStuffs不会。

"UserId": "The valid is required"

不确定这里发生了什么。这两个操作均通过验证过滤器,但是一种方法没有ValidationState错误,而另一种则没有。两次传递的UserId为空。不确定为什么会触发一个而不触发另一个吗? 任何想法?

0 个答案:

没有答案