2015-11-02 34 views
8

在我的组织中,我有几个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/

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

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

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

    +1

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

    +1

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

    回答

    -1

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