如何巧妙实现ASP.NET Core接口代理转发,打造高效长尾词SEO策略?

2026-03-31 08:231阅读0评论SEO资源
  • 内容介绍
  • 相关推荐

本文共计982个文字,预计阅读时间需要4分钟。

如何巧妙实现ASP.NET Core接口代理转发,打造高效长尾词SEO策略?

前言+先讲讲本文字幕的发展背景吧..+在如今前后端分离的大背景下,咱的客户又要有求于啦..+要前后端分离呢?+因为种种原因..+没办 法用用纯前端框架(其实本质是学习成本高,又没钱请前端开发人员)

前言

先讲讲本文的开发背景吧..

在如今前后端分离的大背景下,咱的客户又有要求啦~

要前后端分离~ 然因为种种原因..没办法用用纯前端的框架(其实是学习成本高,又没钱请前端开发人员)...

所以最终决定了一种方案..

那就是采用MVC(只处理前端视图层,单纯是为了托管在.net core上)+Webapi的方式来实现前后端分离(讲真,很奇葩)..

那么问题就随之而来了.

现在主流的前端框架都是托管在nodejs上,是通过axios来访问后端API,可以通过配置axios的代理配置(proxyTable)来实现跨域访问.

那么我们的JS运行在MVC上,托管在.net core上..那咋办呢?..没有现成的转发轮子..我们只有自己造了..

所以这就是本篇的背景 - -.~

正文

幸运的是ASP.NET Core 给我们提供了强大的中间件模式.

我们完全可以通过定义一个转发中间件的形式来实现代理接口转发,流程如图:

废话不多说,我们来创建我们的中间件:

一.创建检测约定URL的接口与实现

首先定义一个接口IUrlRewriter 用来检测我们的URL是否有对应前缀,如果有,则产生新的URL地址:

如何巧妙实现ASP.NET Core接口代理转发,打造高效长尾词SEO策略?

这里我们定义接口是为了方便以后更好的更换注入类来实现快速更换检测前缀的规则.

public interface IUrlRewriter { Task<Uri> RewriteUri(HttpContext context); }

实现这个接口,如下(解释都在注释里了):

public class PrefixRewriter : IUrlRewriter { private readonly PathString _prefix; //前缀值 private readonly string _newHost; //转发的地址 public PrefixRewriter(PathString prefix, string newHost) { _prefix = prefix; _newHost = newHost; } public Task<Uri> RewriteUri(HttpContext context) { if (context.Request.Path.StartsWithSegments(_prefix))//判断访问是否含有前缀 { var newUri = context.Request.Path.Value.Remove(0, _prefix.Value.Length) + context.Request.QueryString; var targetUri = new Uri(_newHost + newUri); return Task.FromResult(targetUri); } return Task.FromResult((Uri)null); } }

二.创建代理转发需要的ProxyHttpClient

创建独立的ProxyHttpClient,主要是为了区分代理转发的localhost:63445"));//这里填写前缀与需要转发的地址

然后在Startup的Configure中,启动我们的中间件,如下:

app.UseMiddleware<ProxyMiddleware>();

五.测试中间件效果

我们编写前端代码如下:

created: function () { this.mockTableData1(); axios.get("/webapp/api/values/get", "123").then(res => { alert(res.data[0]) }); axios.post("/webapp/api/values/post",{value: 'david'}).then(res => { alert(res.data.message) }); }

在另外的WebApi项目,编写接口如下:

[HttpGet] public ActionResult<IEnumerable<string>> Get() { return new string[] { "value1", accstring.ToString() }; } [HttpPost] public AjaxResult Post(dynamic value) { string aaa = JsonConvert.SerializeObject(value); return Success("OK"); }

效果如下,可以看到我们的视图正确的获取到了返回值:

写在最后

这里我们通过中间件的形式实现了接口的代理转发,在具体的使用过程中肯定还会有一些小问题,而且这里我们只实现了Http的转发.ws的则没有.

如果要使用的话,其实国外有一个开源的项目:github.com/ProxyKit, 已经有900多个star了.应该还不错.

到此这篇关于ASP.NET Core 奇技淫巧之接口代理转发的实现的文章就介绍到这了,更多相关ASP.NET Core 接口代理转发内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

本文共计982个文字,预计阅读时间需要4分钟。

如何巧妙实现ASP.NET Core接口代理转发,打造高效长尾词SEO策略?

前言+先讲讲本文字幕的发展背景吧..+在如今前后端分离的大背景下,咱的客户又要有求于啦..+要前后端分离呢?+因为种种原因..+没办 法用用纯前端框架(其实本质是学习成本高,又没钱请前端开发人员)

前言

先讲讲本文的开发背景吧..

在如今前后端分离的大背景下,咱的客户又有要求啦~

要前后端分离~ 然因为种种原因..没办法用用纯前端的框架(其实是学习成本高,又没钱请前端开发人员)...

所以最终决定了一种方案..

那就是采用MVC(只处理前端视图层,单纯是为了托管在.net core上)+Webapi的方式来实现前后端分离(讲真,很奇葩)..

那么问题就随之而来了.

现在主流的前端框架都是托管在nodejs上,是通过axios来访问后端API,可以通过配置axios的代理配置(proxyTable)来实现跨域访问.

那么我们的JS运行在MVC上,托管在.net core上..那咋办呢?..没有现成的转发轮子..我们只有自己造了..

所以这就是本篇的背景 - -.~

正文

幸运的是ASP.NET Core 给我们提供了强大的中间件模式.

我们完全可以通过定义一个转发中间件的形式来实现代理接口转发,流程如图:

废话不多说,我们来创建我们的中间件:

一.创建检测约定URL的接口与实现

首先定义一个接口IUrlRewriter 用来检测我们的URL是否有对应前缀,如果有,则产生新的URL地址:

如何巧妙实现ASP.NET Core接口代理转发,打造高效长尾词SEO策略?

这里我们定义接口是为了方便以后更好的更换注入类来实现快速更换检测前缀的规则.

public interface IUrlRewriter { Task<Uri> RewriteUri(HttpContext context); }

实现这个接口,如下(解释都在注释里了):

public class PrefixRewriter : IUrlRewriter { private readonly PathString _prefix; //前缀值 private readonly string _newHost; //转发的地址 public PrefixRewriter(PathString prefix, string newHost) { _prefix = prefix; _newHost = newHost; } public Task<Uri> RewriteUri(HttpContext context) { if (context.Request.Path.StartsWithSegments(_prefix))//判断访问是否含有前缀 { var newUri = context.Request.Path.Value.Remove(0, _prefix.Value.Length) + context.Request.QueryString; var targetUri = new Uri(_newHost + newUri); return Task.FromResult(targetUri); } return Task.FromResult((Uri)null); } }

二.创建代理转发需要的ProxyHttpClient

创建独立的ProxyHttpClient,主要是为了区分代理转发的localhost:63445"));//这里填写前缀与需要转发的地址

然后在Startup的Configure中,启动我们的中间件,如下:

app.UseMiddleware<ProxyMiddleware>();

五.测试中间件效果

我们编写前端代码如下:

created: function () { this.mockTableData1(); axios.get("/webapp/api/values/get", "123").then(res => { alert(res.data[0]) }); axios.post("/webapp/api/values/post",{value: 'david'}).then(res => { alert(res.data.message) }); }

在另外的WebApi项目,编写接口如下:

[HttpGet] public ActionResult<IEnumerable<string>> Get() { return new string[] { "value1", accstring.ToString() }; } [HttpPost] public AjaxResult Post(dynamic value) { string aaa = JsonConvert.SerializeObject(value); return Success("OK"); }

效果如下,可以看到我们的视图正确的获取到了返回值:

写在最后

这里我们通过中间件的形式实现了接口的代理转发,在具体的使用过程中肯定还会有一些小问题,而且这里我们只实现了Http的转发.ws的则没有.

如果要使用的话,其实国外有一个开源的项目:github.com/ProxyKit, 已经有900多个star了.应该还不错.

到此这篇关于ASP.NET Core 奇技淫巧之接口代理转发的实现的文章就介绍到这了,更多相关ASP.NET Core 接口代理转发内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!