Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 忽略绑定中的所有参数,但在actions签名中意外指定的参数除外_Asp.net Web Api - Fatal编程技术网

Asp.net web api 忽略绑定中的所有参数,但在actions签名中意外指定的参数除外

Asp.net web api 忽略绑定中的所有参数,但在actions签名中意外指定的参数除外,asp.net-web-api,Asp.net Web Api,我有一个web api控制器,如: public HttpResponseMessage MyAction(string param1, string param2) { //do whatever } 如果我有这样的要求 控制器/MyAction?参数1=a和参数2=b 一切都很好 但是如果我有 控制器/MyAction?参数1=a¶m2=b&excessParam=c 然后我发现没有发现任何行动。我理解这是由于web api绑定规则/优先级造成的 我感兴趣的是,除了控制器操作签名

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

public  HttpResponseMessage MyAction(string param1, string param2)
{
//do whatever
}
如果我有这样的要求 控制器/MyAction?参数1=a和参数2=b 一切都很好

但是如果我有 控制器/MyAction?参数1=a¶m2=b&excessParam=c

然后我发现没有发现任何行动。我理解这是由于web api绑定规则/优先级造成的

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

附言。 不讨论可选参数,因为我仍然必须在actions签名中指定它们

我理解这有点违背web api绑定的本质,我确信这可能会导致重叠/模糊绑定的问题,但我只是好奇是否有解决方案

但是如果我有 控制器/MyAction?参数1=a¶m2=b&excessParam=c

然后我发现没有发现任何行动

不,不完全是这样。如果不提供一些已知参数,您将获得404:

Controller/MyAction?param2=b&excessParam=c
public class MyModel
{
    public string Param1 { get; set; }
    public string Param2 { get; set; }
}
Web API会忽略多余的参数,不会给您带来任何麻烦

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

public IHttpActionResult MyAction(string param1 = null, string param2 = null)
{
}
或者,编写一个包含已知参数的模型:

Controller/MyAction?param2=b&excessParam=c
public class MyModel
{
    public string Param1 { get; set; }
    public string Param2 { get; set; }
}
然后:

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

不知道该说什么,但我可以向您保证,如果我提供了所有已知参数和一个不在方法签名中的多余参数,我得到的消息是:“没有找到与请求URI匹配的HTTP资源”我不确定,因为我刚刚测试了它,我的服务工作没有任何问题,不管我抛出了多少查询字符串参数。也许您的解决方案中有一些自定义代码或模型绑定器的行为与此类似,但在现成的ASP.NET Web API项目中并非如此。只需创建一个新的WebAPI项目并亲自尝试即可。因此,现在您应该问自己的问题是,这个自定义代码在您的解决方案中位于何处,以便您可以尝试在那里修复它。顺便问一下,你试过我建议的视图模型方法吗?嗯…那很奇怪。不是说你错了,只是想知道为什么它对我不起作用。让我在这里做一些测试,看看管道中是否有其他东西把它搞砸了。我也希望我能正确理解你的问题:你问的是ASP.NET Web API,对吗?因为您的问题是用asp.net-web-api标记的,但是在您的示例中,您展示了一些asp.net MVC控制器操作,您知道,返回
操作结果的操作。为什么没有视图模型?它是如此干净,它肯定会清理你的行动签名。