【发布时间】:2015-05-07 04:07:00
【问题描述】:
我有一个 C# WebApi 4 项目,我试图在其中包含一个带有字符“/”的字符串参数。比如我在参数中传递了一个路径:
http://localhost/api/MyController/mypath/testing
我希望 MyController 的 Get 方法中的 id 参数填充“mypath/testing”。但是,看起来路由的东西这应该是两个参数并且找不到去哪里所以它返回错误。
我想我需要更改默认路由。目前在 WebApiConfig 类中设置为:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
但我不确定要使用哪种类型的模式。有人有什么建议吗?
编辑:如果我将 URL 更改为 http://localhost/api/MyController?id=mypath/testing 并将路由修改为:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}?{id}",
defaults: new { id = RouteParameter.Optional }
);
然后参数确实去了。但是,我要求不要更改 URL 模式,也不要更改 URL 编码。
【问题讨论】:
-
在传入之前对其进行编码?不要使用
/作为分隔符,因为它已经在 URL 中使用了? RFC 告诉您 URL ietf.org/rfc/rfc3986.txt 中的有效内容。哦,如果您遇到这个问题(例如,如果您登录某人并使用returnUrl返回示例中的当前链接),双编码 URL 在 .NET 中很有趣:stackoverflow.com/questions/7251285/… -
我能想到的唯一方法是
ControllerName/{*id}。但它有其局限性。 -
@Mathew,效果很好!如果您添加答案,我会将其标记为正确。另外,我很好奇 - 你提到的一些限制是什么?
标签: c# asp.net-mvc asp.net-web-api asp.net-web-api-routing