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 对象属性绑定