使用多个参数在Web api中路由冲突

时间:2016-01-14 06:53:09

标签: asp.net-mvc asp.net-web-api routes asp.net-mvc-routing

我使用Web Api创建参数范围为0到4的REST API。 以下是我的API示例:

  1. GetTaxRates()
  2. GetTaxRatesByDate(字符串日期,字符串名称="")//名称是可选参数
  3. GetTaxBetweenDates(string frmDate,string toDate,string name ="")// name是可选参数
  4. GetRecentTaxRates(字符串名称="")//名称是可选参数
  5. 对于这些不同的GET电话, 我在webapiconfig中创建了以下路线:

    1. routeTemplate:" api / {controller} / {action}",             默认值:new {}

    2. routeTemplate:" api / {controller} / {action} / {date} / {name}",            默认值:new {name = RouteParameter.Optional}

    3. routeTemplate:" api / {controller} / {action} / {frmdate} / {toDate} / {name}",             默认值:new {name = RouteParameter.Optional}

    4. 当我调用API时,它适用于大多数路由,但是路由之间似乎存在冲突,我收到错误"控制器上没有找到任何操作' TaxRate& #39;与请求匹配。"当我调用动作api / TaxRate / GetTaxBetweenDates / 2015-04-01 / 201504-10

      虽然我在使用所有参数调用相同的api时得到结果:api / TaxRate / GetTaxBetweenDates / 2015-04-01 / 201504-10 / abc

      当我更改路由序列时,GetTaxRatesbyDate API调用会出现同样的问题。

2 个答案:

答案 0 :(得分:0)

根据Web api路由中的经验法则,您应首先注册更具体的路由。请查看此链接Routing order。这里可能有用的是注册更具体的路线,如“api/{controller}/GetTaxRatesByDate/{date}/{name}", defaults: new { name= RouteParameter.Optional }

答案 1 :(得分:-1)

我能够使用属性路由解决上述问题。