我试图建立一个全面的路线的跟踪时的一个会员串的网址。一个affilite码的标志是通过一个 x 随后通过一个 int, ,而且只会出现在一个网址(但在此之前,查询string)。

这个想法是,我将提取会员的ID,做一些记录,然后做一个301同样的请求没有会员身份证。

例如:

http://www.domain.com/x32
http://www.domain.com/x32/
http://www.domain.com/path/to/something/x32
http://www.domain.com/x32?query=string
http://www.domain.com/x32/?query=string
http://www.domain.com/path/to/something/x32?query=string
http://www.domain.com/path/to/something/x32/?query=string

我有这个路线

routes.Add(new Route("{url}/x{affiliateExternalId}", new MvcRouteHandler())
{
     Defaults = new RouteValueDictionary(
      new { controller = "Home", action = "LogCookieAndRedirect" }
     ),
     Constraints = new RouteValueDictionary(new { affiliateExternalId = @"\d{1,6}" })
});

其中只有比赛

http://www.domain.com/path/x32
http://www.domain.com/path/x32/

什么我需要做到匹配的一切,并通过查询串的控制器吗?还有一个 * 操作者,我怀疑我应该使用,但是我不能把它做什么,我需要。

有帮助吗?

解决方案

{*url} 将符合整个路径,而不仅仅是一个分段。然而,由于它与全的道路,你不能那么匹配的会员身份证上结束。该路线将与每一个要求。你可以得到解决,通过添加一条路线的约束,以检查 url 有一个会员ID在结束:

routes.MapRoute(
    "WithAffiliate",
    "{*url}",
    new { controller="Home", action="LogCookieAndRedirect" },
    new { url = @"/x[0-9]+$" }
 );

你的行动会然后需要分析附属ID url 参数本身。如果你有选择修改的网址结构,这将是可能的匹配ID如果在开始的路径:

routes.MapRoute(
    "WithAffiliate",
    "x{affiliateExternalId}/{*url}",
    new { controller="Home", action="LogCookieAndRedirect" }
 );

其他提示

如果我们这样做,我会让它的一个值在query string.

例如:

http//www.domain.com/path/to/something?affiliate=X32&query=string

问题是,会员id 可选的.如果你把它放在路,你将改变结构的道路,基于是否的会员身份证明,所以你必须要做你的每一个路线的两倍(一次与会员身份证和一次没有).

你只能有这样的捕获所有的路线,如果你只有一条路线的定义。但是如果你有多条路,那么你是要添加, {affiliateExternalId} 参数的所有路线(除非我失去了一些东西).

我第二个 罗伯特*哈维's 建议.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top