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

2025-05-29 0 80

问题

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

答案

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29
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,通过客户端调试工具观察重定向过程:

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

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

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

讨论

网址重定向就是根据用户自定义规则来修改请求的网址,目的是为了将服务器资源和浏览器网址解绑定。这样做可能是出于安全考虑, 搜索引擎优化(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接口的类来实现:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63
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里面:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33
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,观察重定向过程:

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

源代码下载

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://www.cnblogs.com/sanshi/p/7744957.html?utm_source=tuicool&utm_medium=referral

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 [译]ASP.NET Core 2.0 网址重定向的方法 https://www.kuaiidc.com/99764.html

相关文章

发表评论
暂无评论