业务场景:
公司的容器程序需要给前端暴露接口但是代码里面又不想写webapi项目工程就用到了宿主可以达到webapi的效果
1、owin实现
2、其他实现
测试实现如下
1、新建一个控制台程序
2、新建一个Controller文件并继承ApiController
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Http; namespace ConsoleApplication1 { public class BlahController : ApiController { [HttpGet] public string Date() { return DateTime.Today.ToString("yyyy/MM/dd"); } } }
3、实现调用
3.1实现调用一
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Web.Http; using System.Web.Http.SelfHost; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { #region http://localhost:9001/Blah/Date //指定URL var config = new HttpSelfHostConfiguration("http://localhost:9001"); //设定路由 config.Routes.MapHttpRoute("API", "{controller}/{action}/{id}", new { id = RouteParameter.Optional }); using (var httpServer = new HttpSelfHostServer(config)) { //OpenAsync()屬非同步呼叫,加上Wait()則等待開啟完成才往下執行 httpServer.OpenAsync().Wait(); Console.WriteLine("Web API host started..."); string line = null; do { line = Console.ReadLine(); } while (line != "exit"); //結束链接 httpServer.CloseAsync().Wait(); } #endregion } } }
3.2实现调用二
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Web.Http; using System.Web.Http.SelfHost; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { #region http://localhost:9001/api/Blah/Date HttpSelfHostConfiguration config = new HttpSelfHostConfiguration("http://localhost:9001"); config.Routes.MapHttpRoute( name: "API", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }); using (HttpSelfHostServer server = new HttpSelfHostServer(config)) { server.OpenAsync().Wait(); Console.WriteLine("Web API is started now"); Console.ReadLine(); } #endregion } } }