• 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.编辑控制台代码

            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();
                }
            }
    View Code

    4.新建一个控制器

        public class TestController : ApiController
        {
            public string Get()
            {
                return "hello world";
            }
        }
    View Code

    5.用 Postman 测试

    6.最终一览:

    OwinSelfHost:

    1.新建控制台程序:OwinSelfHost

    2.引入nuget包:

    注意与 SelfHost  包名的区别:

    3.添加 Owin 启动类:

        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);
            }
        }
    View Code

    4.新建一个控制器

        public class TestController : ApiController
        {
            public string Get()
            {
                return "this is OwinSelfHost";
            }
        }
    View Code

    5.控制台代码:

     static void Main(string[] args)
            {
                string baseAddress = "http://localhost:9527/";
                using (WebApp.Start(url: baseAddress))
                {
                    Console.WriteLine("请开始您的表演");
                    Console.ReadLine();
                }
            }
    View Code

    6.测试:

    7.最终一览:

    总结:

    上面两个例子,控制器和宿主都在一个程序集,

    但实际工作中,程序集应该会是一个单独的类库,

    下一篇接着记录.

  • 相关阅读:
    java关键字synchronized
    JVM调优之jstack找出最耗cpu的线程并定位代码
    高性能Mysql
    awk使用入门
    JVM性能调优监控工具
    java垃圾回收算法
    JVM内存模型
    jvm之内存分配与回收策略
    leetcode 78. 子集(c++)
    leetcode 148. 排序链表(c++)
  • 原文地址:https://www.cnblogs.com/refuge/p/8759836.html
Copyright © 2020-2023  润新知