忽略绑定中的所有参数,除了在操作签名中明确指定的参数

时间:2016-04-24 07:45:49

标签: asp.net-web-api

我有一个web api控制器,如:

public  HttpResponseMessage MyAction(string param1, string param2)
{
//do whatever
}

如果我有这样的要求 控制器/ MyAction参数1 = A&安培; param2的= B 一切都很好。

但如果我有类似的东西 控制器/ MyAction参数1 = A&安培; param2的= B和excessParam = C

然后我知道没有找到任何行动。我理解它是由于web api绑定规则/优先级。

我感兴趣的是,是否有某种方法可以简单地忽略请求中提交的所有参数,除非在控制器操作签名中明确指定的参数?

PS。 没有谈论可选参数,因为我仍然需要在动作签名中指定它们。

我知道它有点违背了web api绑定的性质,我相信它可能会导致重叠/ ambigious绑定的问题,但我只是好奇,如果有一些解决方案。

1 个答案:

答案 0 :(得分:1)

  

但如果我有类似的东西   控制器/ MyAction参数1 = A&安培; param2的= B和excessParam = C

     

然后我知道没有找到任何行动。

不,那不是真的。如果您没有提供一些已知的参数,您将获得404:

Controller/MyAction?param2=b&excessParam=c

Web API会忽略多余的参数,不会给您带来任何麻烦。

为了避免这些404错误,您可以将这些参数设为可选:

public IHttpActionResult MyAction(string param1 = null, string param2 = null)
{
}

或者写一个包含已知参数的模型:

public class MyModel
{
    public string Param1 { get; set; }
    public string Param2 { get; set; }
}

然后:

public IHttpActionResult MyAction([FromUri] MyModel model)
{
}