加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – Asp.Net MVC路由 – 如何匹配整个URL?

发布时间:2020-12-16 03:32:27 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试创建一个全能路由来跟踪联盟字符串何时在URL中.联盟代码由x后跟一个int标记,并且只出现在URL的末尾(但在查询字符串之前). 我的想法是,我将提取联盟会员ID,进行一些日志记录,然后在没有联盟会员ID的情况下对同一请求执行301. 例如: http://www.dom
我正在尝试创建一个全能路由来跟踪联盟字符串何时在URL中.联盟代码由x后跟一个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

我有这条路

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}将匹配整个路径,而不仅仅是一个段.但是,由于它匹配整个路径,因此您无法在最后匹配联属会员ID.该路线将匹配每个请求.您可以通过添加路由约束来检查该URL是否在末尾具有联盟ID:

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

然后,您的操作需要从url参数本身解析会员ID.如果您可以选择修改URL结构,则可以匹配ID,如果它位于路径的开头:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读