如何在ASP.NET Core中使用URL重写中间件

URL重写是基于一个或多个预定义规则更改请求URL的过程。 您可以利用ASP.NET Core中的URL重写中间件来处理URL重定向以及URL重写。 本文讨论了如何在ASP.NET Core中实现URL重写。

若要使用本文中说明的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019

创建一个ASP.NET Core API项目

首先,让我们在Visual Studio中创建一个ASP.NET Core项目。 假设系统中已安装Visual Studio 2019,请按照下面概述的步骤在Visual Studio中创建一个新的ASP.NET Core项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web应用程序”。
  4. 点击下一步。
  5. 在“配置新项目”窗口中,指定新项目的名称和位置。
  6. 单击创建。
  7. 在接下来显示的“创建新的ASP.NET Core Web应用程序”窗口中,从顶部的下拉列表中选择.NET Core作为运行时,并选择ASP.NET Core 2.2(或更高版本)。 我将在这里使用ASP.NET Core 3.0。
  8. 选择“ API”作为项目模板以创建新的ASP.NET Core API应用程序。
  9. 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不再使用这些功能。
  10. 确保将身份验证设置为“无身份验证”,因为我们也不会使用身份验证。
  11. 单击创建。

现在,您应该在Visual Studio中有一个新的ASP.NET Core API项目。 我们将在本文的后续部分中使用该项目。

通过NuGet安装URL重写中间件

现在,您已经在Visual Studio中创建了ASP.NET Core应用程序,接下来应该做的是安装必要的NuGet包。 要使用ASP.NET Core中的URL重写中间件,您应该在项目中安装Microsoft.AspNetCore.Rewrite程序包。

您可以从Visual Studio 2019 IDE中的NuGet程序包管理器安装此程序包。 或者,您可以运行以下命令以通过.NET CLI安装此软件包。

dotnet add package Microsoft.AspNetCore.Rewrite

URL重定向和URL重写

URL重定向和URL重写不同。 在URL重定向中,服务器将HTTP状态代码301或302发送回客户端,并要求客户端使用另一个URL访问资源。 然后,客户端将适当地更新URL,并使用新的URL访问资源。 因此,URL重定向发生在客户端,即它是客户端操作,并且需要往返服务器。

相比之下,URL重写是服务器端的操作。 它是根据一个或多个预定义规则修改请求URL的过程。 在URL重写中,重写的URL不发送回客户端; 客户端永远不会知道该资源与客户端所请求的资源不在同一个位置。 请注意,URL重写并不是什么新鲜事物-自遗留ASP.NET以来就已经存在。 在URL重写中,URL的重写发生在服务器端,并且不需要往返。

在ASP.NET Core中配置URL重定向

您可以在Startup类中配置URL重写和URL重定向。 在Startup.cs文件的Configure方法中,添加以下代码以将HTTP请求重定向到HTTPS。

app.UseRewriter(new RewriteOptions()
               .AddRedirectToHttps());

在ASP.NET Core中配置URL重写

以下代码段是URL重写的示例。 请注意如何使用AddRewrite方法修改请求URL。

var rewrite = new RewriteOptions()
               .AddRewrite("api/values", "api/default", true);
               app.UseRewriter(rewrite);

在执行应用程序时,您会发现DefaultController的HttpGet方法被调用,但是Web浏览器显示了以下URL:

http://localhost:52137/api/values

您还可以使用正则表达式来指定规则,如下面的代码片段所示。

var rewrite = new RewriteOptions()
                 .AddRewrite(@"^Home/User?Code=(\d+)", "Home/$1", true);
                  app.UseRewriter(rewrite);

在ASP.NET Core中创建自定义URL重写规则

要使用复杂的规则,您也可以创建一个自定义规则。 为此,您需要创建一个扩展IRule接口并实现ApplyRule方法的类,如下面给出的代码片段所示。

public class CustomRule : Microsoft.AspNetCore.Rewrite.IRule
    {
        public void ApplyRule(RewriteContext context)
        {
            throw new NotImplementedException();
        }
    }

以下代码段说明了如何使用ApplyRule方法。 请注意,此处显示的ApplyRule方法仅用于说明目的。 您可以根据自己的要求进行更改。

 public class CustomRule : Microsoft.AspNetCore.Rewrite.IRule
    {
        public void ApplyRule(RewriteContext context)
        {
            var request = context.HttpContext.Request;
            var host = request.Host;
            if (host.Host.Contains("localhost",
             StringComparison.OrdinalIgnoreCase))
            {
                if(host.Port == 80)
                {
                    context.Result = RuleResult.ContinueRules;
                    return;
                }               
            }
            var response = context.HttpContext.Response;
            response.StatusCode = (int)HttpStatusCode. BadRequest;
            context.Result = RuleResult.EndResponse;
        }
    }

将自定义规则添加到ASP.NET Core中的规则集合

您可以在Configure方法中将自定义规则添加到规则集合中,如下面给出的代码片段所示。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  {
            var options = new RewriteOptions();
            options.Rules.Add(new CustomRule())
            app.UseRewriter(options);
  }

URL重写使地址与基础资源分离。 您可以利用URL重写来提供用户友好的URL,这些URL更加简单易记,并且对搜索引擎更有意义。

From: https://www.infoworld.com/article/3445867/how-to-use-url-rewriting-middleware-in-aspnet-core.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值