作为Api网关的Asp.net Web Api

作为Api网关的Asp.net Web Api

问题描述:

在我的组织中,我有几个asp.net web api项目。
我愿意开发一个网页API,它将像网关一样行事,并拥有单一的入口点。作为Api网关的Asp.net Web Api

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

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

让HumanResourceProject在:api.domain.com/api/hr
样本控制器API /小时/ LeaveRecord/GetByEmployee/
设CRMProject在:api.domain.com/api/crm

样本控制器API/CRM /客户/ GetByRegion/
让网关在:api.domain.com/api/gateway

我希望我的网关来处理像
1. api.domain.com/api/gateway/ API/CRM /客户/ GetByRegion/

api.domain.com/api/gateway/请求API /小时/ LeaveRecord/GetByEmployee/

  1. 使像IP /访问/浏览器等一些控制

  2. 我想调用正确的API控制器API/CRM /客户/戈tByRegion/

  3. 返回被调用API的控制器的响应。
  4. enter image description here

开始=>
+1

您似乎想要使用API​​网关,但是再次,您似乎都希望将其用于将请求路由到相关方。如果是这种情况,那么看看IIS的URL重写。如果它位于云中,请查看Azure服务总线中继。 – Don

+1

另外我想在Gateway中实现一些安全控制。 – zapoo

OK,

  1. 首先,您需要注册您的Web API的路线。请确保您在WebApiConfig.cs映射你的路线格式文件如下:

    // Web API routes 
        config.MapHttpAttributeRoutes(); 
    
        config.Routes.MapHttpRoute(
         name: "DefaultApi", 
         routeTemplate: "api/{controller}/{id}", 
         defaults: new { id = RouteParameter.Optional } 
        ); 
    
  2. 创建网页API控制器,并设置路由前缀

[RoutePrefix("api/crm")] 
[System.Web.Http.Cors.EnableCorsAttribute("*","*","*")] 
[Authorize] 
public class CRMController: ApiController 
{ 
  1. 为您的请求创建控制器方法
  2. [HttpGet] 
    [Route("GetByRegion/{regionId}")] 
    public IHttpActionResult GetSomeDataByRegion(int regionId) 
    { 
    
    1. 我建议你用的工具,如提琴手或Chrome扩展程序,如休息控制台,让您的GET/POST请求等来测试你的端点
    2. 编辑:如果您有一个未知的复杂对象,可能会导致请求发生问题,那么使用模型类包装参数总是很好的做法。嗅探流量会帮助您更轻松地找到问题。

    开始=“4”>
开始=>