WebApi 的三种寄宿方式 (一) - 宿主和控制器在一个程序集
最近逛博客园,看到了Owin,学习了一下,做个笔记,说不定将来哪天就用上了
关于 Owin 的介绍,百度解释的很清楚了: https://baike.baidu.com/item/owin/2860765?fr=aladdin
参考资料:http://www.cnblogs.com/xiangchangdong/p/6768316.html#3946065
WebApi编译后,其实就是一个dll文件,并不是一个可执行文件,所以它需要一个宿主.
我所知道的,webapi一共有三种宿主:
1. IIS
2. SelfHost
3. OwinSelfHost
SelfHost:
1.新建控制台程序,非常干净,啥也没有
2.引入nuget包
对比 IIS 宿主可以发现不同点:
IIS:
SelfHost:
3.编辑控制台代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
static void Main(string[] args) { var config = new HttpSelfHostConfiguration("http://localhost:9527"); config.Routes.MapHttpRoute( "API Default", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional }); using (var server = new HttpSelfHostServer(config)) { server.OpenAsync().Wait(); Console.WriteLine("请开始您的表演"); Console.ReadLine(); } }
4.新建一个控制器
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class TestController : ApiController { public string Get() { return "hello world"; } }
5.用 Postman 测试
6.最终一览:
OwinSelfHost:
1.新建控制台程序:OwinSelfHost
2.引入nuget包:
注意与 SelfHost 包名的区别:
3.添加 Owin 启动类:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Startup { public void Configuration(IAppBuilder app) { // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888 HttpConfiguration config = new HttpConfiguration(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{Controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional }); app.UseWebApi(config); } }
4.新建一个控制器
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class TestController : ApiController { public string Get() { return "this is OwinSelfHost"; } }
5.控制台代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
static void Main(string[] args) { string baseAddress = "http://localhost:9527/"; using (WebApp.Start(url: baseAddress)) { Console.WriteLine("请开始您的表演"); Console.ReadLine(); } }
6.测试:
7.最终一览:
总结:
上面两个例子,控制器和宿主都在一个程序集,
但实际工作中,程序集应该会是一个单独的类库,
下一篇接着记录.