通过webapi的GetAll方法传递额外的参数

时间:2015-05-17 04:24:48

标签: asp.net-web-api

如何通过 webapi 的Get方法传递额外参数,因为当我通过时  GetALL(int page,int limit,int start)它工作正常,但是当传入一个可选的参数并且可能为null时,它会抛出错误。

GetAll(int page,int limit,int start,string ? search)

让它运作的最佳方式是什么

1 个答案:

答案 0 :(得分:0)

在Web API中,可选参数是可以为空的参数。

如果您有类型值,如int或DateTime,则需要使用?语法使它们为空。

但是当他们使用类而不是值类型时,它们可以直接转换为null,因此您不需要也不能将它们标记为可为空。所以,你的方法签名必须简单:

 GetAll(int page,int limit,int start,string search)

如果您希望pagelimitstart可以为空,则应将其声明为int?。因此,在这个3个参数上面的签名是强制性的,最后一个是可选的。

编辑,OP评论

当您使用Web API的默认路由时,选择正确方法的唯一方法是通过参数匹配,即请求中的参数必须与操作中的参数匹配,包括可选参数。因此,有两种方法可以使其发挥作用:

  • 将可选参数作为空参数发布。对于您的情况,如果您使用查询字符串,请在网址中加入&search=
  • 修改路由,以便将参数作为路由参数提供,并将搜索参数定义为可选

您还可以通过在路径中包含操作来完全修改Web API路由。在这种情况下,您必须在URL中指定要调用操作的操作,但该方法可以通过操作名称(由方法名称或Action属性给出)来选择,而不是通过参数匹配来选择。在这种情况下,您不需要提供可选参数。它将像MVC路由一样工作。