将get url参数路由到MVC Web API中的Action

时间:2014-08-20 06:41:01

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

我知道你可以改变Web API中路由的默认行为,如下所示:

routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

但你能

吗?
routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}?verb={action}",
    defaults: new { action = RouteParameter.Optional }
);

编辑:以下路由模板会出现以下错误:

  

“API / {控制器}?动词= {}行动”

因为“字符”而引发YSOD

"api/{controller}%3Fverb={action}"

抛出以下内容

  

找到了与请求匹配的多个操作:GetRecord on type   RouteConfigMedGet.Controllers.TestController类型的ListRecords   RouteConfigMedGet.Controllers.TestController

1 个答案:

答案 0 :(得分:1)

据我所知,你不能用查询字符串参数编写路由。

如果您想确保您的控制器操作仅处理具有特定查询参数的请求,您可以create custom route constraint检查是否存在必需的参数,并将其作为约束添加到您的路线中。

一般来说,使用查询参数来解决不同的行为是非常奇怪的。我从this帖子中复制了很好的解释:

  

路由用于描述一个资源与另一个资源,而as   你说过,QueryString参数适用于Presentation logic *。   因此,您不能指望指向资源的URL转到   如果使用相同的URL,则使用不同的资源,但使用查询字符串   参数。这不是MVC的失败,而是我不相信   你正确使用了Querystrings。

乔治斯托克