[译]ASP.NET Core 2.0 网址重定向的方法
更新时间:2017年10月31日 10:29:08 作者:三生石上(FineUI控件)
本篇文章主要介绍了[译]ASP.NET Core 2.0 网址重定向的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
问题
如何在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}”);
});
}
运行,并在浏览器地址栏输入:localhost:56825/films,通过客户端调试工具观察重定向过程:
在地址栏输入: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)。
在此过程中,客户端并不知道服务器端的内部映射操作,因此用户看到的浏览器地址栏依然显示的是最初请求地址。
规则
重定向和重写规则可以是正则表达式,更加详细的信息请参考: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}”);
});
}
运行,在地址栏输入:localhost:56825/films?id=123,观察重定向过程:
源代码下载
原文:tahirnaushad.com/2017/08/18/url-rewriting-in-asp-net-core/
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。
您可能感兴趣的文章:ASP.NET Core跨站登录重定向的实现新姿势ASP.NET Core中如何实现重定向详解
ASP.NET
Core
重定向
相关文章
subsonic3.0插件更新字符串过长引发的异常修复方法这篇文章主要介绍了subsonic3.0插件更新字符串过长引发的异常修复方法,需要的朋友可以参考下 2014-04-04
ASP.NET五步打包下载Zip文件实例本篇文章主要介绍了ASP.NET五步打包下载Zip文件实例,现在分享给大家,也给大家做个参考。有需要的小伙伴可以参考下。
2016-11-11
将文本文件的内容或者文字保存成图片的方法分享这篇文章主要介绍了将文本文件的内容或者文字保存成图片的方法,需要的朋友可以参考下 2014-02-02
asp.net实现中英文多域名检测的方法这篇文章主要介绍了asp.net实现中英文多域名检测的方法,涉及asp.net针对URL中域名的解析及字符串操作相关技巧,需要的朋友可以参考下 2016-08-08
.Net语言Smobiler开发之如何仿微信朋友圈的消息样式这篇文章主要介绍了.Net语言Smobiler开发平台如何仿微信朋友圈的消息样式?本文为大家揭晓答案 2016-09-09
在.ashx文件中获取cookies值实现代码.ashx文件中获取cookies值对于一些高手们就不多说了,至于一些小白们还是有必要多多学习啊,好了话不多说,看代码,感兴趣的你可不要错过了哈 2013-02-02
在.NET中取得代码行数的方法这篇文章主要介绍了在.NET中如何取得代码行数,需要的朋友可以参考下 2014-06-06
asp.net 禁用viewstate在web.config里在web.config里设置禁用viewstate的代码。 2009-06-06
在.NET中扫描局域网服务的实现方法下面小编就为大家分享一篇在.NET中扫描局域网服务的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 2018-01-01
ASP.NET MVC5网站开发之用户添加和浏览2(七)这篇文章主要为大家详细介绍了ASP.NET MVC5网站开发之用户添加和浏览,感兴趣的小伙伴们可以参考一下 2016-08-08
最新评论

评论(0)