[译]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}");

  });

} 

运行,并在浏览器地址栏输入: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/

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

相关文章

  • 一个简单的文件MD5码自动计算比较器(附源码)

    一个简单的文件MD5码自动计算比较器(附源码)

    一直在玩 WOW ,发现网上的 MD5 计算工具都没有自动比较功能,每次下载更新计算后,都要自己一个一个字母核对,比较麻烦。 最近开始学习 C# ,用 .NET ,做了一个简单的文件MD5码自动计算比较器。
    2013-02-02
  • 浅谈ASP.NET Core 中jwt授权认证的流程原理

    浅谈ASP.NET Core 中jwt授权认证的流程原理

    这篇文章主要介绍了浅谈ASP.NET Core 中jwt授权认证的流程原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • ASP.NET 网站开发中常用到的广告效果代码

    ASP.NET 网站开发中常用到的广告效果代码

    在ASP.NET项目开发中,会被要求添加广告,有翻屏效果、有广告轮流显示、飘浮广告、左侧广告、右侧广告等。
    2010-04-04
  • ASP.NET Core6.0-wwwroot文件夹无法访问解决方法

    ASP.NET Core6.0-wwwroot文件夹无法访问解决方法

    ASP.NET Core项目中的wwwroot文件夹被视为Web根文件夹,本文主要介绍了ASP.NET Core6.0-wwwroot文件夹无法访问解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-09-09
  • ASP.NET Core 6.0 中使用Autofac的项目实践

    ASP.NET Core 6.0 中使用Autofac的项目实践

    本文主要介绍了ASP.NET Core 6.0 中使用Autofac的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • 查看Json输出的*最方便*的方法 (转)

    查看Json输出的*最方便*的方法 (转)

    项目的表现层使用MVC+Extjs。在开发过程中,一旦页面显示不正常,第一个需要排查的总是“Action是否输出了正确的Json?”。
    2009-11-11
  • 获取App.config配置文件中的参数值

    获取App.config配置文件中的参数值

    这篇文章介绍了获取app.config配置文件中的参数值方法,首先是要添加System.Configuration引用,其次类文件中必须有 using System.Configuration;再次App.config添加,最后向App.config配置文件添加参数,下面通过列子给大家讲解下,需要的朋友可以参考下
    2015-07-07
  • Asp.Net Core对接钉钉群机器人的完整步骤记录

    Asp.Net Core对接钉钉群机器人的完整步骤记录

    这篇文章主要给大家介绍了关于Asp.Net Core对接钉钉群机器人的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • Silverlight融合ajax实现前后台数据交互

    Silverlight融合ajax实现前后台数据交互

    两年前Silverlight 还未起名,故事发生在WPF/E 的年代里。07年8月在中软实习时,我承担起了在. Net 中嵌入WPF/E 的任务,目的是增强用户体验。
    2009-05-05
  • ASP.NET调用WebService服务的方法详解

    ASP.NET调用WebService服务的方法详解

    这篇文章主要介绍了ASP.NET调用WebService服务的方法,较为详细的分析了WebService服务的功能,创建步骤与使用方法,需要的朋友可以参考下
    2016-05-05

最新评论