我有一个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绑定的问题,但我只是好奇,如果有一些解决方案。
答案 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)
{
}