华域联盟 .Net .NET Core如何进行请求转发的实现

.NET Core如何进行请求转发的实现

.NET Core如何进行请求转发的实现
 更新时间:2020年11月05日 09:25:53   作者:Jeffcky  

这篇文章主要介绍了.NET Core如何进行请求转发的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言
冒个泡,近日,有关注我公众号的小伙伴私信我,遇到一个问题搞了很久没解决,此问题具有参考意义,这里跟大家分享下,希望对后续可能有需要的你能有所参考和帮助。
请求转发问题
内网环境跟外网隔离,现在外网的请求都需要一个专用服务器转接到内网处理,用app.UseRewriter转接, 从外网服务器转发到内网服务器的时候Header 里面的Authorization 居然丢失了,重新设置RewriteContext.HttpContex Header也不行,有没有办法解决?当时我的想法是,实在不行,在外网将token直接放到url或body里不就完事,这样的话,外网每增加一个接口,都得将token取出然后进行转换,内网以相同方式获取,这是小伙伴所不能忍受。这里我们创建两个Web应用程序,然后添加自定义转发规则。首先我们在第一个Web应用程序创建针对如下接口请求转发规则

public class RewriteForwardRules
{
public static void RedirectRequests(RewriteContext context)
{
var request = context.HttpContext.Request;

if (request.Path.Value.StartsWith("/api/forward", StringComparison.OrdinalIgnoreCase))
{
var response = context.HttpContext.Response;

response.Headers[HeaderNames.Location] = "localhost:8091/api/custom";

context.Result = RuleResult.EndResponse;
}
}
}

然后在startup中注入我们自定义转发规则

app.UseRewriter(new RewriteOptions().Add(RewriteForwardRules.RedirectRequests));

当然,如果URL(GET请求)或Body(POST请求)中包含其他参数,将其对应转发写入URL或Body即可,这里token已存储在请求头中,所以我们直接转发请求即可。接下来我们通过Postman模拟外网发出如下POST请求

紧接着,我们在第二个Web应用程序中来接收转发请求,并获取token信息

[HttpPost] public IActionResult Custom()
{
var token = Request.Headers[HeaderNames.Authorization].ToString();

return Ok(token);
}

然后我们一运行,发现结果都没转发到对应内网应用程序,这是为何呢?事实上,转发请求涉及到资源重分配指向另一URL问题,当然我们需要注意的是,既然是转发请求,势必转发者和接受者请求方式必须一致,要不然肯定不行。所以我们必须显式指定重定向状态码,设置为308,如下:

针对状态码308的意思,我们可以参看.NET Core中对于状态码枚举解释: 永久重定向,原始请求方式和目标请求方式必须一致,支持原始请求和目标请求同为GET或POST。 .NET Core中关于此状态码的解释并不那么详细,我们来到专对状态码官方解释( httpstatuses.com/308 ),这里我贴下谷歌翻译后的中文:308永久重定向:已为目标资源分配了一个新的永久URI,以后对该资源的任何引用都应使用其中一个URI。具有链接编辑功能的客户端应在可能的情况下自动将对有效请求URI 1的引用重新链接到服务器发送的一个或多个新引用。服务器应在响应中生成一个Location头字段,其中包含新的永久URI的首选URI引用。用户代理可以使用位置字段值进行自动重定向。服务器的响应有效负载通常包含简短的超文本注释,其中包含指向新URI的超链接。默认情况下,308响应可缓存;即,除非方法定义或显式缓存控制。
当然,我们也可以设置状态码为301,301永久移动:已为目标资源分配了一个新的永久URI,以后对该资源的任何引用都应使用其中一个URI。那么状态码301和308到底有何区别呢? 301类似308永久移动,只不过,301不允许将请求方法从GET更改为POST。
总结

请求转发时注意设置状态码为301或308
301类似308永久移动,只不过,301不允许将请求方法从GET更改为POST
基于以上所述,请求转发推荐使用状态码308

到此这篇关于.NET Core如何进行请求转发的实现的文章就介绍到这了,更多相关.NET Core 请求转发内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:ASP.NET Core 奇技淫巧之接口代理转发的实现

.NET
Core
请求转发

相关文章
.NET/C#利用反射调用含ref或out参数的方法示例代码这篇文章主要给大家介绍了关于.NET/C#利用反射调用含ref或out参数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2018-09-09
asp.net core中如何使用cookie身份验证这篇文章主要介绍了asp.net core中如何使用cookie身份验证的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2020-12-12
ASP.NET MVC API 接口验证的示例代码本篇文章主要介绍了ASP.NET MVC API 接口验证的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
2017-10-10
Coolite配置 管理软件开发历程之开发环境:VS2008、SQL Server2005、Coolite Toolkit 2010-03-03
Asp.NEt邮箱验证修改密码通过邮箱找回密码功能这篇文章主要介绍了Asp.NEt邮箱验证修改密码通过邮箱找回密码功能,需要的朋友可以参考下 2017-10-10
Coolite Cool Study 2 同时更新多个Tab前段时间有一个需求是这样子的——录入一个查询条件, 出来的查询结果是多张页面。不知道有没朋友遇到这个问题。 展现的效果大概是这个样子 2009-05-05
.NET使用DinkToPdf将HTML转成PDF的示例代码这篇文章主要介绍了.NET使用DinkToPdf将HTML转成PDF的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2021-02-02
WPF的数据绑定详细介绍数据绑定:是应用程序 UI 与业务逻辑之间建立连接的过程。 如果绑定正确设置并且数据提供正确通知,则当数据的值发生更改时,绑定到数据的视觉元素会自动反映更改。 数据绑定可能还意味着如果视觉元素中数据的外部表现形式发生更改,则基础数据可以自动更新以反映更改。 2013-03-03
ASP.NET实现301重定向方法我们给大家整理了关于ASP.NET中实现301重定向的方法以及小技巧总结,有兴趣的朋友可以操作试试。 2018-04-04
ASP.NET实现用户注册和验证功能(第4节)这篇文章主要介绍了ASP.NET实现用户注册和验证功能,学习ASP.NET验证控件的作用和使用方法,在此基础上了解常用第三方控件,需要的朋友可以参考一下 2015-08-08

最新评论

本文由 华域联盟 原创撰写:华域联盟 » .NET Core如何进行请求转发的实现

转载请保留出处和原文链接:https://www.cnhackhy.com/5035.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部