【问题标题】:QueryString with MVC 5 AttributeRouting in Web API 2Web API 2 中带有 MVC 5 AttributeRouting 的 QueryString
【发布时间】:2013-12-30 05:45:26
【问题描述】:

我有以下代码

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

据我所知,

~/..../publish/1?publishid=12
~/..../publish?id=1&publishid=12

应该可以工作并绑定两个参数,但它不适用于第二种情况。 第一种情况,publishid 不会被绑定。

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

【问题讨论】:

    标签: asp.net-mvc asp.net-web-api query-string


    【解决方案1】:

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

    其他情况:

    1. publish/1 - 将不起作用,因为B 表示需要发布 ID。为防止这种情况,您可以将操作签名更改为 B(string id, string publishid=null) 之类的,并且仅绑定 id
    2. publish/1?publishid=10 - 在两者都绑定的地方按预期工作。

    【讨论】:

    • 谢谢,我实际上正在做“string publishid=null”,我只是忘了把它放在我的问题中。我编辑了问题中的代码。
    • 怎么样 ~/..../publish?id=1&publishid=2 我认为这也是有效的,但仍然不适合我。它会给我 404 Not Found !
    • 实际上second case 指的是这种情况...这不起作用,因为id 是路由模板publish/{id} 中的必需变量。在 Web API 中,首先发生路由模板匹配,然后是动作选择过程......
    猜你喜欢
    • 2017-04-25
    • 2013-10-10
    • 2014-04-27
    • 1970-01-01
    • 2016-02-20
    • 2014-07-10
    • 2013-12-04
    • 2015-03-23
    • 1970-01-01
    相关资源
    最近更新 更多