最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

[译]ASP.NET Core 2.0 网址重定向的方法

来源:动视网 责编:小采 时间:2020-11-27 22:35:21
文档

[译]ASP.NET Core 2.0 网址重定向的方法

[译]ASP.NET Core 2.0 网址重定向的方法:问题 如何在ASP.NET Core 2.0中实现网址重定向? 答案 新建一个空项目,在Startup.cs文件中,配置RewriteOptions参数并添加网址重定向中间件(UseRewriter): public void Configure(IApplicationBuilder app, IHost
推荐度:
导读[译]ASP.NET Core 2.0 网址重定向的方法:问题 如何在ASP.NET Core 2.0中实现网址重定向? 答案 新建一个空项目,在Startup.cs文件中,配置RewriteOptions参数并添加网址重定向中间件(UseRewriter): public void Configure(IApplicationBuilder app, IHost


问题

如何在ASP.NET Core 2.0中实现网址重定向?

答案

新建一个空项目,在Startup.cs文件中,配置RewriteOptions参数并添加网址重定向中间件(UseRewriter):

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

{

 var rewrite = new RewriteOptions()

 .AddRedirect("films", "movies")

 .AddRewrite("actors", "stars", true);

 

 app.UseRewriter(rewrite);

 

 app.Run(async (context) =>

 {

 var path = context.Request.Path;

 var query = context.Request.QueryString;

 await context.Response.WriteAsync($"New URL: {path}{query}");

 });

} 

运行,并在浏览器地址栏输入:http://localhost:56825/films,通过客户端调试工具观察重定向过程:

在地址栏输入:http://localhost:56825/actors,再次观察重定向过程:

讨论

网址重定向就是根据用户自定义规则来修改请求的网址,目的是为了将服务器资源和浏览器网址解绑定。这样做可能是出于安全考虑, 搜索引擎优化(SEO),用户友好网址,将HTTP重定向到HTTPS等多种目的。

当你无法使用Web服务器(IIS,Apache,Nginx)的重定向功能时,ASP.NET Core提供了一个可选项 - 请求网址重定向中间件。然后它的性能和功能比不上Web服务器的重定向。

重定向中间件可以做两件事情:客户端重定向和服务器重写:

重定向(客户端)

这是一个客户端操作,工作流程如下:

1. 客户端请求一个资源,比如 /films

2. 服务器返回301(Moved Permanently)或者302(Found)状态码,并在响应头中添加Location属性,用来指示浏览器请求新的地址(比如/movies)。

3. 客户端请求新的地址,并显示在浏览器的地址栏中。

重写(服务端)

它是一个服务器端操作,工作流程如下:

1. 客户端请求一个资源,比如 /actors

2. 服务器将其内部映射到新的地址(比如/stars)并且返回200(OK)。

在此过程中,客户端并不知道服务器端的内部映射操作,因此用户看到的浏览器地址栏依然显示的是最初请求地址。

规则

重定向和重写规则可以是正则表达式,更加详细的信息请参考:https://docs.microsoft.com/en-gb/aspnet/core/fundamentals/url-rewriting

自定义重定向规则

我们也可以自定义重定向规则,通过一个继承自IRule接口的类来实现:

public class MoviesRedirectRule : IRule

{

 private readonly string[] _matchPaths;

 private readonly string _newPath;

 

 public MoviesRedirectRule(string[] matchPaths, string newPath)

 {

 _matchPaths = matchPaths;

 _newPath = newPath;

 }

 

 public void ApplyRule(RewriteContext context)

 {

 var request = context.HttpContext.Request;

 

 // 已经是目标地址了,直接返回

 if (request.Path.StartsWithSegments(new PathString(_newPath)))

 {

 return;

 }

 

 if (_matchPaths.Contains(request.Path.Value))

 {

 var newLocation = $"{_newPath}{request.QueryString}";

 

 var response = context.HttpContext.Response;

 response.StatusCode = StatusCodes.Status302Found;

 context.Result = RuleResult.EndResponse;

 response.Headers[HeaderNames.Location] = newLocation;

 }

 }

}   

然后在Configure()中,将此自定义规则添加到RewriteOptions里面:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

{

 var rewrite = new RewriteOptions()

 .Add(new MoviesRedirectRule(

 matchPaths: new string[] { "/films", "/features", "/albums" },

 newPath: "/movies"));

 

 

 app.UseRewriter(rewrite);

 

 app.Run(async (context) =>

 {

 var path = context.Request.Path;

 var query = context.Request.QueryString;

 await context.Response.WriteAsync($"New URL: {path}{query}");

 });

}   

运行,在地址栏输入:http://localhost:56825/films?id=123,观察重定向过程:

源代码下载

原文:https://tahirnaushad.com/2017/08/18/url-rewriting-in-asp-net-core/

文档

[译]ASP.NET Core 2.0 网址重定向的方法

[译]ASP.NET Core 2.0 网址重定向的方法:问题 如何在ASP.NET Core 2.0中实现网址重定向? 答案 新建一个空项目,在Startup.cs文件中,配置RewriteOptions参数并添加网址重定向中间件(UseRewriter): public void Configure(IApplicationBuilder app, IHost
推荐度:
标签: 网址 2.0 core
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top