Asp.net Web Api 作为 Api 网关

Posted

技术标签:

【中文标题】Asp.net Web Api 作为 Api 网关【英文标题】:Asp.net Web Api as an Api Gateway 【发布时间】:2016-02-02 12:02:55 【问题描述】:

在我的组织中,我有几个 asp.net web api 项目。 我愿意开发一个 web api,它就像一个网关并且有一个入口点。

我尝试了处理程序和过滤器,但路由不允许我这样做。

让我解释一下,我真正想做的事情

让 HumanResourceProject 在:api.domain.com/api/hr 示例控制器是 api/hr/LeaveRecord/GetByEmployee/ 让 CRMProject 在:api.domain.com/api/crm 示例控制器是 api/crm/Customers/GetByRegion/ 让网关位于:api.domain.com/api/gateway

我希望我的网关能够处理诸如之类的请求 1. api.domain.com/api/gateway/api/crm/Customers/GetByRegion/ 或 api.domain.com/api/gateway/api/hr/LeaveRecord/GetByEmployee/

    制作一些控件,例如 ip/access/browser 等。

    我想调用正确的 api 控制器 api/crm/Customers/GetByRegion/

    被调用 api 的控制器返回响应。

【问题讨论】:

您似乎想要使用 API 网关,但话又说回来,您似乎想要使用它的只是将请求路由到相关方。如果是这种情况,请查看 IIS URL 重写。如果它托管在云中,请查看 Azure 服务总线中继。 另外我想在网关中实现一些安全控制。 @zapoo 你找到解决办法了吗? 从那时起,我就有了信任相同身份提供者的 API。 (即身份服务器4)授权和身份验证控制现在更容易了。特别是对于这个gateway pattern,我会在本地使用 nginx,在云上你有很多选择。 【参考方案1】:

您可以使用 IApplicationBuilder ,并在 .net 核心的 Startup 类中注入这是您的 Configure() 方法。

所以在到达实际控制器之前,您的所有请求都将由 Pre-request 处理程序处理。

 public static IApplicationBuilder MiddleWare(this IApplicationBuilder
 builder)
         
             return builder.UseMiddleware<RequestHandler>();
         

这里你的所有请求将首先由 RequestHandler 处理,然后再到达实际控制器。

【讨论】:

虽然 5 年前 .net core 还不存在,但感谢您提醒我们现在有中间件。

以上是关于Asp.net Web Api 作为 Api 网关的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Web API - JWT 消息处理程序 - 没有注册类型错误

asp.net mvc 6 web api + angular资源发布数组作为对象属性

前端 ASP.NET MVC4 作为一个项目,ASP.NET Web API 作为同一解决方案中的另一个项目 - 如何从前端调用 WebAPI?

处理 ASP.NET Core Web API 对象属性绑定

ASP.NET Core Web API - 如何将属性组合作为原始数据存储到另一个模型的单个列中

ASP.NET Web API 身份验证(Web + 移动)