Mr.*_*ble 5 asp.net-mvc routing url-routing asp.net-mvc-routing
我正在尝试创建一个全能路由来跟踪联盟字符串何时在URL中.联盟代码由a x
后跟a 标记int
,并且仅出现在URL的末尾(但在查询字符串之前).
我的想法是,我将提取联盟会员ID,进行一些日志记录,然后在没有联盟会员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
Run Code Online (Sandbox Code Playgroud)
我有这条路
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}" })
});
Run Code Online (Sandbox Code Playgroud)
哪个只匹配
http://www.domain.com/path/x32
http://www.domain.com/path/x32/
Run Code Online (Sandbox Code Playgroud)
我需要做什么来匹配所有内容并将查询字符串传递给控制器?有一个*
我怀疑我应该使用的操作员,但是我不能让它做我需要的.
ste*_*son 10
{*url}
将匹配整个路径,而不仅仅是一个段.但是,由于它匹配整个路径,因此您无法在最后匹配联属会员ID.该路线将匹配每个请求.您可以通过添加路由约束来检查最后是否url
具有联盟ID:
routes.MapRoute(
"WithAffiliate",
"{*url}",
new { controller="Home", action="LogCookieAndRedirect" },
new { url = @"/x[0-9]+$" }
);
Run Code Online (Sandbox Code Playgroud)
然后,您的操作需要从url
参数本身解析联属会员ID .如果您可以选择修改URL结构,则可以匹配ID,如果它位于路径的开头:
routes.MapRoute(
"WithAffiliate",
"x{affiliateExternalId}/{*url}",
new { controller="Home", action="LogCookieAndRedirect" }
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2831 次 |
最近记录: |