如何使用query-string指定路由?

时间:2013-06-11 16:20:10

标签: c# asp.net-web-api query-string asp.net-web-api-routing attributerouting

我正在尝试将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 METHOD NOT ALLOWED

我尝试过在URL和查询字符串中发送参数,两者的响应都是一样的。当我尝试查询字符串版本时,我已将路由修改为

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

我也尝试将初始字从dictionaries更改为dictionary,以避免与其他两条GET路线产生任何歧义,但仍然没有成功。

documentation for AttributeRouting仅提及与参数约束相关的查询字符串(由于WebHost框架而无法使用),并且未提及如何在路由中使用查询字符串。

有人能告诉我如何使用这两个参数实现第三条路径,还是我必须删除AttributeRouting或尝试自己的控制器?

1 个答案:

答案 0 :(得分:1)

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

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