.net 如何在web API中验证此无效属性?

c9qzyr3d  于 2023-04-22  发布在  .NET
关注(0)|答案(1)|浏览(103)

我有一个用户搜索请求对象,它看起来像这样:

UserSearchRequest
{
    FirstName:"John",
    LastName:"Smith",
    Expand:["groups","devices"]
}

Expand是一个可选的参数。我有一个验证,它检查提供的Expand参数是否在预期的参数集内。问题是,如果客户端提交这样的请求:

{
    FirstName:"John",
    LastName:"Smith",
    Expand:1
}

默认情况下,Web API 2会将此请求传递给控制器方法,其Expand值为null。因此用户不会知道他提交了一个错误的请求,控制器也无法将其识别为错误的请求,因为null是此属性的有效值。是否有方法覆盖此默认行为?

6yoyoihd

6yoyoihd1#

动作过滤器在控制器执行其逻辑之前被触发。我将给予一个大致的想法,你需要做什么才能让你走上正确的轨道。
操作过滤器的第一个要求是通过扩展ActionFilterAttribute类来创建自己的过滤器类。
下面是一个例子

public class ValidateModelAttribute : 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]

希望这能帮助你根据自己的逻辑定制它。编码愉快。

相关问题