2015-11-02 78 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請求等來測試你的端點
  • 編輯:如果您有一個未知的複雜對象,可能會導致請求發生問題,那麼使用模型類包裝參數總是很好的做法。嗅探流量會幫助您更輕鬆地找到問題。