我有一个用户搜索请求对象,如下所示:
UserSearchRequest
{
FirstName:"John",
LastName:"Smith",
Expand:["groups","devices"]
}
Expand是一个可选参数。我有验证,它检查提供的Expand参数是否在精简的预期参数集内。问题是如果客户提交这样的请求:
{
FirstName:"John",
LastName:"Smith",
Expand:1
}
默认情况下,Web API 2会将此请求传递给控制器方法,其展开值为null。因此,用户不会知道他提交了错误请求,并且控制器将无法将其识别为错误请求.b / c null是此属性的有效值。有没有办法覆盖这种默认行为?
答案 0 :(得分:2)
在控制器执行其逻辑之前触发动作过滤器。我将大致了解您需要做些什么才能让您走上正确的轨道。
ActionFilter的第一个要求是通过扩展ActionFilterAttribute类来创建自己的过滤器类。
以下是此
的示例public class ValidateCustomModel : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
//Write your logic to check that all attributes are not null
}
}
现在进入第二步。此步骤将在WebApiConfig类中注册您的过滤器,以便应用程序知道必须在任何使用该属性的地方将请求传递给此过滤器
config.Filters.Add(new ValidateModelAttribute());
现在第三步是将自定义类作为用户发出请求时正在执行的控制器方法的属性。
[ValidateModel]
希望这可以帮助您根据自己的逻辑进行自定义。快乐的编码。