netcore 中的url 重写和动态添加重写规则

时间:2021-03-30 11:24:40   收藏:0   阅读:47
URL 重写可能会降低应用的性能。 如果可行,应限制规则的数量和复杂度。

何时使用 URL 重写中间件

如果无法使用以下方法,请使用 URL 重写中间件:

此外,如果应用程序在 HTTP.sys 服务器(旧称 WebListener)上托管,请使用中间件。

使用 IIS、Apache 和 Nginx 中的基于服务器的 URL 重写技术的主要原因:

Package

URL 重写中间件由 Microsoft.AspNetCore.Rewrite 包提供,该包隐式包含在 ASP.NET Core 应用中。

扩展和选项

通过使用扩展方法为每条重写规则创建 RewriteOptions 类的实例,建立 URL 重写和重写定向规则。 按所需的处理顺序链接多个规则。 使用 UseRewriter 将 RewriteOptions 添加到请求管道时,它会被传递到 URL 重写中间件:

  

 1 public void Configure(IApplicationBuilder app)
 2 {
 3     using (StreamReader apacheModRewriteStreamReader = 
 4         File.OpenText("ApacheModRewrite.txt"))
 5     using (StreamReader iisUrlRewriteStreamReader = 
 6         File.OpenText("IISUrlRewrite.xml")) 
 7     {
 8         var options = new RewriteOptions()
 9             .AddRedirect("redirect-rule/(.*)", "redirected/$1")
10             .AddRewrite(@"^rewrite-rule/(\d+)/(\d+)", "rewritten?var1=$1&var2=$2", 
11                 skipRemainingRules: true)
12             .AddApacheModRewrite(apacheModRewriteStreamReader)
13             .AddIISUrlRewrite(iisUrlRewriteStreamReader)
14             .Add(MethodRules.RedirectXmlFileRequests)
15             .Add(MethodRules.RewriteTextFileRequests)
16             .Add(new RedirectImageRequests(".png", "/png-images"))
17             .Add(new RedirectImageRequests(".jpg", "/jpg-images"));
18 
19         app.UseRewriter(options);
20     }
21 
22     app.UseStaticFiles();
23 
24     app.Run(context => context.Response.WriteAsync(
25         $"Rewritten or Redirected Url: " +
26         $"{context.Request.Path + context.Request.QueryString}"));
27 }

URL 重写

使用 AddRewrite 创建重写 URL 的规则。 第一个参数包含用于匹配传入 URL 路径的正则表达式。 第二个参数是替换字符串。 第三个参数 skipRemainingRules: {true|false} 指示如果当前规则适用,中间件是否要跳过其他重写规则。

 .AddRewrite(@"^rewrite-rule/(\d+)/(\d+)", "rewritten?var1=$1&var2=$2", 
                skipRemainingRules: true)

 

动态添加重写规则

 #在configService 中添加 
          services.AddSingleton<RewriteOptions>();
 # config中添加
            RewriteOptions options = app.ApplicationServices.GetService(typeof(RewriteOptions))  as RewriteOptions;
            options.AddRewrite(@"(.*).jsp", "$1", skipRemainingRules: true);
            app.UseRewriter(options);    

#在后续的任意地方获取并添加重写规则
        public IActionResult Index()
        {
          
            //IConfiguration configura = HttpContextUtil.ServiceProvider.GetService(typeof(IConfiguration))  as IConfiguration;
            //IOptions<RewriteOptions> options =  HttpContextUtil.ServiceProvider.GetService(typeof(IOptions<RewriteOptions>)) as IOptions<RewriteOptions>;

            rwOptions.AddRewrite(@"(.*).html", "$1", skipRemainingRules: true);
             
            return Content("12");
        }

 

原文:https://www.cnblogs.com/netqq/p/14595508.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!