在Web API 2中使用MVC 5 AttributeRouting的QueryString

Pey*_*man 5 asp.net-mvc query-string asp.net-web-api

我有以下代码

[HttpGet] 
[Route("publish/{id}")] 
public IHttpActionResult B(string id, string publishid=null) { ... }
Run Code Online (Sandbox Code Playgroud)

据我所知,

~/..../publish/1?publishid=12
~/..../publish?id=1&publishid=12
Run Code Online (Sandbox Code Playgroud)

应该工作并绑定两个参数,但它不适用于第二种情况.在第一种情况下,不会绑定publishid.

所以我不明白为什么这不起作用.知道为什么会这样吗?

Kir*_*lla 5

第二种情况不起作用,因为它id是路径模板中的必需变量publish/{id}.在Web API中,首先发生路由模板匹配,然后执行动作选择过程.

其他情况:

  1. publish/1- 因为动作B表明需要使用publishid,所以不会起作用.为了防止这种情况,您可以将操作的签名更改为B(string id, string publishid=null)仅限于id绑定
  2. publish/1?publishid=10 - 按预期工作,两者都绑定.