1

我正在尝试将AttributeRouting添加到我的WebAPI项目中。如何用查询字符串指定路由?

在一个控制器我目前有定义的三个GET方法:

[GET("dictionaries")] 
public IEnumerable<Dictionary> Get() 

[GET("dictionaries/{id}")] 
public Dictionary GetByID(int id) 

[GET("dictionaries/{dictionaryID}/{page}")] 
public Dictionary Browse(long dictionaryID, int page) 

前两个路由工作,我希望他们能,但第三始终返回405不允许的方法

我试着发送URL中的参数和查询字符串,并且它们都是相同的响应。当我试着查询字符串的版本,我已经修改了路线是

[GET("dictionaries?dictionaryID={dictionaryID}&page={page} 

我也试着改变从dictionaries初始字dictionary,以避免与其他两个GET航线任何含糊之处,但仍然没有成功。

documentation for AttributeRouting只提及与参数约束(由于WebHost框架而不适用于我)的查询字符串,并未提及查询字符串如何用于路由。

任何人都可以告诉我如何使用这两个参数来实现第三条路线,还是必须放弃AttributeRouting或尝试使用它自己的控制器?

回答

1

Web API动作选择器隐含地认为这里的第三个动作是一个POST,因为它不以GET,POST,PUT等动词开头。尝试添加HttpGet属性,看看它是否有效。

[HttpGet, GET("dictionaries/{dictionaryID}/{page}")] 
public Dictionary Browse(long dictionaryID, int page) 
+0

谢谢基兰,现在完美的工作。我认为AttributeRouting的GET属性允许我删除WebAPI的HttpGet属性 - 该GET取代了HttpGet - 但显然这不是真的。 – awj

+0

这是AR的一个已知问题。 * IActionHttpMethodProvider *在Web API RTM中是内部的,这在这里引起了问题。在Web API vNext中,它已被更改为public,所以一旦发布,就不再需要这个双重声明。更多信息https://github.com/mccalltd/AttributeRouting/issues/83 –