動態WebApi


動態WebApi實現了直接對Service的調用,其實沒有跨過ApiController,只是我們自己創建出ApiController

實現主要分以下幾步

一 對默認WebApi服務的替換

ApiGlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector), new AbpHttpControllerSelector(ApiGlobalConfiguration.Configuration));
ApiGlobalConfiguration.Configuration.Services.Replace(typeof(IHttpActionSelector), new AbpApiControllerActionSelector());
ApiGlobalConfiguration.Configuration.Services.Replace(typeof(HttpControllerActivator), new AbpControllerActivator());

二 路由

定義好路由

ApiGlobalConfiguration.Configuration.Routes.MapHttpRoute(
    "DynamicWebApi",
    "apiservice/{service}/{action}/{id}",
    new { id = RouteParameter.Optional }
);

三 緩存Service

找出所有需要做成動態WebApi的Service,哪些是Controller哪些是Action事先准備好

var controllerInfo = new DynamicApiControllerInfo("Order", typeof(DynamicApiController<IOrderService>));
foreach (var methodInfo in DynamicApiControllerActionHelper.GetMethodsOfType(typeof(IOrderService)))
{
    controllerInfo.Actions[methodInfo.Name] = new DynamicApiActionInfo(methodInfo.Name, HttpMethod.Get, methodInfo);
}
DynamicApiControllerManager.Register(controllerInfo);

四 使用OWIN來替代IIS

什么是 OWIN ?

OWIN 的全稱是 "Open Web Interface for .NET", OWIN 在 .NET Web 服務器和 .NET Web 應用之間定義了一套標准的接口, 其目的是為了實現服務器與應用之間的解耦, 鼓勵為 .NET Web 應用開發簡單模塊。

為什么使用 OWIN

OWIN 定義了 .NET Web 服務器與 .NET Web 應用之間的標准接口, 將應用與服務器 解耦, 使得便攜式 .NET Web 應用以及跨平台的願望成為現實, 標准的 OWIN 應用可以在任何 OWIN 兼容的服務器上運行, 不再依賴與 Windows 和 IIS 。

OWIN使用

應用啟動時調用

const string url = "http://localhost:8080/";
var startOpts = new StartOptions(url);
using (WebApp.Start<Startup>(startOpts))
{
    Console.WriteLine("Server run at " + url + " , press Enter to exit.");
    Console.ReadKey();
}

Startup

public class Startup
{
    public void Configuration(IAppBuilder appBuilder)
    {
        appBuilder.UseWebApi(ApiGlobalConfiguration.Configuration);
    }
}

調用效果

image

請求分析

http://localhost:8080/apiservice/Order/GetOrderDetail?s=1111

  • Order是Controller,也對應IOrderService這個Service
  • GetOrderDetail是Action,也對應IOrderService中的GetOrderDetail方
  • s=1111為參數

執行順序

  1. 先進入AbpHttpControllerSelector,篩選出動態api的請求,
  2. 再進入AbpControllerActivator,創建出ApiController
  3. 再進入AbpApiControllerActionSelector,找出Action。
  4. 最后進入DyanamicHttpActionDescriptor執行Action,也就是執行對應Service的方法

示例代碼:https://github.com/sunven/Abp1

Reference

OWIN初探

ASP.NET Web API和依賴注入

ABP之動態WebAPI(一)

ABP之動態WebAPI(二)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM