我知道你可以改变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
答案 0 :(得分:1)
据我所知,你不能用查询字符串参数编写路由。
如果您想确保您的控制器操作仅处理具有特定查询参数的请求,您可以create custom route constraint检查是否存在必需的参数,并将其作为约束添加到您的路线中。
一般来说,使用查询参数来解决不同的行为是非常奇怪的。我从this帖子中复制了很好的解释:
乔治斯托克路由用于描述一个资源与另一个资源,而as 你说过,QueryString参数适用于Presentation logic *。 因此,您不能指望指向资源的URL转到 如果使用相同的URL,则使用不同的资源,但使用查询字符串 参数。这不是MVC的失败,而是我不相信 你正确使用了Querystrings。
。