zoukankan      html  css  js  c++  java
  • 【Owin 学习系列】2. Owin Startup 类解析

    Owin Startup 类解析

    每个 Owin 程序都有 startup 类,在这个 startup 类里面你可以指定应用程序管道模型中的组件。你可以通过不同的方式来连接你的 startup 类和运行时,这些取决于你选择的宿主模型(OwinHost, IIS, and IIS-Express)。

    你可以通过下面几种方式来连接你的 startup 类和宿主程序。

    • 命名约定:Katana 会在 namespace 中查找一个叫 Startup 的类。
    • OwinStartup 特性:这是开发者最常用的一种方式,下面的特性将会设置 startup 类到 命名空间 OwinDemo 下面的 Startup 类。OwinStartup 特性会覆盖命名约定。
    [assembly: OwinStartup(typeof(OwinDemo.Startup))]
    • Configuration 文件中的 appSetting 元素,appSetting 元素会覆盖命名约定和 OwinStartup 特性。你可以有多个 startup 类 (每个都使用 OwinStartup 特性) ,可以用下面的配置文件来选择使用哪一个 startup 类。
    <appSettings>  
      <add key="owin:appStartup" value="OwinDemo.Startup2" />
    </appSettings>

    startup.cs 代码

    using System;
    using Microsoft.Owin;
    using Owin;
    
    [assembly: OwinStartup(typeof(OwinDemo.Startup))]
    
    namespace OwinDemo
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888
                app.Run(context =>
                {
                    context.Response.ContentType = "text/plain";
                    return context.Response.WriteAsync("Hello, world.");
                });
            }
        }
    
        public class Startup2
        {
            public void Configuration(IAppBuilder app)
            {
                // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888
                app.Run(context =>
                {
                    context.Response.ContentType = "text/plain";
                    return context.Response.WriteAsync("Hello, this is Owin startup class 2.");
                });
            }
        }
    }

    F5 运行以后会进入 startup2 类,可以通过浏览器看到结果。

    你也在配置文件中指定 startup 类的别名,同时也要在 OwinStartup 特性里设定,然后就会根据别名和 OwinStartup 特性找到对应的 startup 类。

    <appSettings>  
      <add key="owin:appStartup" value="ProductionConfiguration" />       
    </appSettings>
    using System;
    using Microsoft.Owin;
    using Owin;
    
    [assembly: OwinStartup("ProductionConfiguration", typeof(OwinDemo.Startup2))]
    
    namespace OwinDemo
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888
                app.Run(context =>
                {
                    context.Response.ContentType = "text/plain";
                    return context.Response.WriteAsync("Hello, world.");
                });
            }
        }
    
        public class Startup2
        {
            public void Configuration(IAppBuilder app)
            {
                // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888
                app.Run(context =>
                {
                    context.Response.ContentType = "text/plain";
                    return context.Response.WriteAsync("Hello, this is Owin startup class 2.");
                });
            }
        }
    }

    如果要关闭 OWIN startup 发现,那么只需要在 appSetting 里面加入下面的代码

    <add key="owin:AutomaticAppStartup " value="false" />

    指定 Owin startup 类的 Configuration 方法

    <add key="owin:appStartup" value="OwinDemo.Startup2.ConfigurationTwo" />
    

    public class Startup2 { public void Configuration(IAppBuilder app) { // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888 app.Run(context => { context.Response.ContentType = "text/plain"; return context.Response.WriteAsync("Hello, this is Owin startup class 2."); }); } public void ConfigurationTwo(IAppBuilder app) { // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888 app.Run(context => { context.Response.ContentType = "text/plain"; return context.Response.WriteAsync("Hello, this is Owin startup class 2 and ConfigurationTwo."); }); } }

    F5 运行以后可以看到结果

    web.config 配置文件里有多个 owin:appStartup 值,那么会启用最后一个配置 OwinDemo.Startup2 。

    <appSettings>
        <add key="owin:appStartup" value="OwinDemo.Startup2.ConfigurationTwo" />
        <add key="owin:appStartup" value="OwinDemo.Startup2" />
      </appSettings>

    使用  Owinhost.exe

    Nuget 里安装 OwinHost

    导航到你的应用程序文件夹(包含了 web.config 的文件夹),然后运行 Owinhost.exe

    ..packagesOwinhost<Version>	oolsOwinhost.exe

    最后访问 http://localhost:5000/ ,就可以看到效果了。

    也可以通过指定 OwinHost.exe 后面的参数访问不同的 startup 类

    ..packagesOwinHost.3.1.0	oolsOwinhost.exe OwinDemo.Startup2.ConfigurationTwo

    源代码链接:

    链接: http://pan.baidu.com/s/1bOfTRC 密码: xfhk

    参考链接:

    https://docs.microsoft.com/zh-cn/aspnet/aspnet/overview/owin-and-katana/owin-startup-class-detection

  • 相关阅读:
    【推荐】微服务分布式企业框架Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis
    将WCF寄宿在托管的Windows服务中
    剑指Offer
    剑指Offer
    Entity Framework 无法对没有主键的视图映射实体的解决办法
    设置Sql Agent运行Job时的执行账户
    IE中Keep-Alive机制引起的错误
    Ajax错误 “SCRIPT7002: XMLHttpRequest: 网络错误 0x2ef3, 由于出现错误 00002ef3 而导致此项操作无法完成” 的归纳总结
    在IIS站点中Adomd.net集成认证账号问题
    出现“不能执行已释放的Script代码”错误的原因及解决办法
  • 原文地址:https://www.cnblogs.com/Soulless/p/7250014.html
Copyright © 2011-2022 走看看