Redirect 将规则重定向到Url重写.NET核心
我正在Startup.cs中实现AddRewrite规则,如下所示:Redirect 将规则重定向到Url重写.NET核心,redirect,.net-core,url-rewriting,Redirect,.net Core,Url Rewriting,我正在Startup.cs中实现AddRewrite规则,如下所示: var rewriteOptions = new RewriteOptions() .AddRewrite(@"^UserLogin/([0-9]+)/([_0-9a-zA-Z-]+)", "User/UserLogin?param1=$1¶m2=$2", skipRemainingRules: true) app.UseRewri
var rewriteOptions = new RewriteOptions()
.AddRewrite(@"^UserLogin/([0-9]+)/([_0-9a-zA-Z-]+)", "User/UserLogin?param1=$1¶m2=$2", skipRemainingRules: true)
app.UseRewriter(rewriteOptions);
这很有效,访问时url被正确重写:UserLogin/param1value/param2value
现在我想重定向旧的原始URL,我尝试了以下方法:
var rewriteOptions = new RewriteOptions()
.AddRedirect(@"^User/UserLogin?param1=([0-9]+)¶m2=([_0-9a-zA-Z-]+)", "UserLogin/$1/$2", (int)HttpStatusCode.Redirect)
.AddRewrite(@"^UserLogin/([0-9]+)/([_0-9a-zA-Z-]+)", "User/UserLogin?param1=$1¶m2=$2", skipRemainingRules: true)
app.UseRewriter(rewriteOptions);
然而,我不能让这个工作,我不能让新的网址工作
这里缺少什么?首先,正则表达式中的
?
需要转义为\?
,因为?在正则表达式中,表示匹配0或1次
但即使这样也无济于事,因为根据AddRedirect
方法的文档,它所做的是
如果正则表达式与HttpContext的PathString匹配,则重定向请求
由于路径字符串不包括查询字符串,因此它将不匹配。这是显而易见的,如果你看
不幸的是,该实现是内部的,因此您无法创建从RedirectRule继承的规则,但由于该实现是开源的,您可以复制该实现并创建自己的重定向规则,该规则与url和查询字符串匹配