Redirect 将规则重定向到Url重写.NET核心

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&param2=$2", skipRemainingRules: true) app.UseRewri

我正在Startup.cs中实现AddRewrite规则,如下所示:

var rewriteOptions = new RewriteOptions()
            .AddRewrite(@"^UserLogin/([0-9]+)/([_0-9a-zA-Z-]+)", "User/UserLogin?param1=$1&param2=$2", skipRemainingRules: true)
        app.UseRewriter(rewriteOptions);
这很有效,访问时url被正确重写:UserLogin/param1value/param2value

现在我想重定向旧的原始URL,我尝试了以下方法:

    var rewriteOptions = new RewriteOptions()
            .AddRedirect(@"^User/UserLogin?param1=([0-9]+)&param2=([_0-9a-zA-Z-]+)", "UserLogin/$1/$2", (int)HttpStatusCode.Redirect)
            .AddRewrite(@"^UserLogin/([0-9]+)/([_0-9a-zA-Z-]+)", "User/UserLogin?param1=$1&param2=$2", skipRemainingRules: true)
        app.UseRewriter(rewriteOptions);
然而,我不能让这个工作,我不能让新的网址工作


这里缺少什么?

首先,正则表达式中的
需要转义为
\?
,因为?在正则表达式中,表示匹配0或1次

但即使这样也无济于事,因为根据
AddRedirect
方法的文档,它所做的是

如果正则表达式与HttpContext的PathString匹配,则重定向请求

由于路径字符串不包括查询字符串,因此它将不匹配。这是显而易见的,如果你看

不幸的是,该实现是内部的,因此您无法创建从RedirectRule继承的规则,但由于该实现是开源的,您可以复制该实现并创建自己的重定向规则,该规则与url和查询字符串匹配