问题
如何在ASP.NET核心2.0中实现URL重定向?
回答
创建一个新的空项目,在Startup.cs文件中,配置RewriteOptions参数并添加URL重定向中间件(UseRewriter):
public void Configure(IApplicationBuilder应用程序,IHostingEnvironment env){ var重写=new重写选项()。添加重定向(“电影”,“电影”)。AddRewrite('演员','明星',true);app。UseRewriter(重写);app。运行(异步(上下文)={ var path=context。请求。路径;var查询=上下文。Request . QueryString等待上下文。响应。WriteAsync($“New URL : { path } { query }”);});}运行,在浏览器地址栏输入:http://localhost:56825/films,通过客户端调试工具观察重定向过程:
在地址栏中输入:http://localhost 336056825/actors,再次观察重定向过程:
讨论
Url重定向是根据用户定义的规则修改请求的URL,目的是解除服务器资源和浏览器URL的绑定。这可能是出于安全原因,搜索引擎优化,用户友好的网站,重定向HTTP到HTTPS和其他目的。
当你无法使用Web服务器(IIS、Apache、Nginx)的重定向功能时,ASP.NET芯提供了一个选项——请求URL重定向中间件。那么它的性能和功能就比不上Web服务器的重定向。
重定向中间件可以做两件事:客户端重定向和服务器重写:
重定向(客户端)
这是一个客户端操作,工作流程如下:
1.客户端请求资源,例如/films
2.服务器返回状态代码301(永久移动)或302(找到),并在响应头中添加位置属性,以指示浏览器请求新地址(如/电影)。
3.客户端请求一个新地址,并将其显示在浏览器的地址栏中。
覆盖(服务器端)
这是一个服务器端操作,具有以下工作流程:
1.客户端请求资源,例如/actors
2.服务器将其内部映射到一个新地址(如/star),并返回200(OK)。
在这个过程中,客户端不知道服务器的内部映射操作,所以用户看到的浏览器地址栏仍然显示初始请求地址。
规则
重定向和重写规则可以是正则表达式。更多详情请参考:https://docs . Microsoft.com/en-GB/aspnet/core/foundations/URL-重写
自定义重定向规则
我们还可以自定义重定向规则,并通过从IRule接口继承的类来实现它:
公共类moviersedirectorrule : IRule { private readonly string[]_ match path;私有只读字符串_ newPathpublic MoviesRedirectRule(字符串[]match path,字符串new path){ _ match path=match path;_ newPath=newPath} public void ApplyRule(RewriteContext context){ var request=context。请求;//它已经是目标地址,所以直接返回if (request.path .以段(new pathstring (_ new path))开头){ return} if(_ match path)。包含(请求。路径.值)){ var newLocation=$ ' { _ newPath } {请求。query string } ';var响应=上下文。响应;回应。StatusCode=StatusCodes。状态302已找到;语境。结果=规则结果。EndResponse回应。标题[标题名称。location]=new location;}}}然后将此自定义规则添加到Configure()中的重写选项中:
public void Configure(IApplicationBuilder应用程序,IHostingEnvironment env){ var重写=new重写选项()。添加(新电影导演规则(匹配路径:新字符串[]{ '/电影','/功能','/专辑' },新路径: '/电影');app。UseRewriter(重写);app。运行(异步(上下文)={ var path=context。请求。路径;var查询=上下文。Request . QueryString等待上下文。响应。WriteAsync($“New URL : { path } { query }”);});}运行,输入:http://localhost:56825/films?Id=123,观察重定向过程:
源代码下载
原文:https://tahirnaushad.com/2017/08/18/URL-rewriting-in-ASP-net-core/
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。