【发布时间】:2016-03-31 02:55:47
【问题描述】:
我有一个 .NET Web API v2 并且需要定义一个可以在路由中的任何点包含正斜杠的路由。我在 WebApiConfig 中像这样配置(某些东西):
config.Routes.MapHttpRoute(
name: "SomeRouteName",
routeTemplate: "api/summary/{*token}",
defaults: new { controller = "Summary" });
不幸的是,令牌包含斜杠,此时我无能为力。如果斜线不在令牌的开头,则上述路线在大多数情况下都有效。所以这可以解决大多数情况。但是,如果令牌以斜杠开头,则它不起作用,因为第一个斜杠被解释为我假设的 URL 的一部分并被吃掉。因此,在我的控制器操作中,我有以下代码(诚然,这是我试图避免的黑客行为):
if (summary == null)
{
summary = _repo.GetSummary($"/{token}");
}
显然,这仅适用于单个斜线。我可以做一个循环并添加更多,但没有办法知道它可能有多少。目前我的数据库中没有以两个斜杠开头的标记,所以这个糟糕的代码现在可以工作。在找到更好的解决方案之前,它被用作创可贴。
编辑:这引用了 * 路线,它主要解决了我原来的问题,但仍然不匹配第一个斜杠:URLs with slash in parameter?
【问题讨论】:
-
UrlEnconding/Decoding 这个令牌不可能吗?
-
那么
token开头有很多斜线的目的是什么? -
@bruno-garcia 我尝试了 UrlEncode /Decode 以查看这是否有效,但无论出于何种原因,斜线(编码为 %2F)仍然会被吃掉。附带说明一下,我可以说 Base64 编码可以解决此问题,但我目前无法更改此问题,因为它会破坏现有应用程序的 API。
-
@Matias 没有任何目的——但令牌是由我的代码生成的,不一定是由我的代码生成的。所以我无法控制令牌的生成。
标签: c# asp.net asp.net-web-api