【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
..\packages\Owinhost<Version>\tools\Owinhost.exe

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

也可以通过指定 OwinHost.exe 后面的参数访问不同的 startup 类
..\packages\OwinHost.3.1.\tools\Owinhost.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
【Owin 学习系列】2. Owin Startup 类解析的更多相关文章
- 【Owin 学习系列】1. 第一个 Owin 程序
IIS 中的 Owin 在 IIS 里面部署 Owin,既能得到 Owin 管道模型的灵活性和模块特性,也能很好地利用 IIS 成熟的配置,Owin 程序将会跑在 ASP.NET request 的管 ...
- Java并发包源码学习系列:ReentrantReadWriteLock读写锁解析
目录 ReadWriteLock读写锁概述 读写锁案例 ReentrantReadWriteLock架构总览 Sync重要字段及内部类表示 写锁的获取 void lock() boolean writ ...
- asp.net core 系列 2 启动Startup类介绍
一.Startup类 ASP.NET Core 应用是一个控制台应用,它在其 Program.Main 方法中创建 Web 服务器.其中Main方法是应用的托管入口点,Main 方法调用 WebHos ...
- Android学习系列(20)--App数据格式之解析Json
JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习. 恰逢本人最近对json做了一个简单的学习,特此总结一下,以飨各位. 为了文 ...
- 【SpringCloud微服务实战学习系列】创建应用及解析
一.创建应用 使用官方Spring Initializr工具生成基础项目(http://start.spring.io/) 导入Intellij idea中 目录结构如下: 二.目录结构说明: src ...
- 【Spring源码深度解析学习系列】复杂标签属性解析(四)
一.创建用于属性承载的BeanDefinition BeanDefiniton是一个接口,在Spring中存在三种实现:RootBeanDefinition.ChildBeanDefinition.G ...
- CobaltStrike逆向学习系列(3):Beacon C2Profile 解析
这是[信安成长计划]的第 3 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 Controller 端分析 0x02 Beacon 端分析 0x03 展示图 在上一篇文章中完成了 S ...
- Caffe学习系列(10):命令行解析
训练网络命令: sudo sh ./build/tools/caffe train --solver=examples/mnist/train_lenet.sh 用预先训练好的权重来fine-tuni ...
- Java并发包源码学习系列:挂起与唤醒线程LockSupport工具类
目录 LockSupport概述 park与unpark相关方法 中断演示 blocker的作用 测试无blocker 测试带blocker JDK提供的demo 总结 参考阅读 系列传送门: Jav ...
随机推荐
- Spring学习(24)--- AOP之 Aspect instantiation models(aspect实例模式)特别说明
重要: schema-defined aspects只支持singleton model,即 基于配置文件的aspects只支持单例模式
- windows手动搭建Kotlin命令行环境
kotlin官网:https://kotlinlang.org 我们可以从GitHub下载.目前最新版本是1.1.2-5 https://github.com/JetBrains/kotlin/rel ...
- Chapter 1:Introduction
作者:桂. 时间:2017-05-24 08:06:45 主要是<Speech enhancement: theory and practice>的读书笔记,全部内容可以点击这里. 1. ...
- Java基础——多态
多态性是指允许不同类型的对象对同一消息做出相应.具有灵活性.抽象.行为共享.代码共享的优势,共享就意味着最大化利用和简洁,还有就是加载速度. 一.多态的作用 消除类型之间的耦合关系.即同一事件发生在不 ...
- easygen通用代码生成框架[开源]
什么东东 用过mybatis的同学都知道,手工写mapper和xml是一件很痛苦的事儿,幸好官方提供了Mybatis-Generator,但是这家伙生成的东西不开放不方便修改,而且项目中的代码生成需求 ...
- Windows 7安装Oracle 10g的方法
Windows7下安装Oracle 10g提示"程序异常终止,发生未知错误"的解决方法 1.修改Oracle 10G\database\stage\prereq\db\refhos ...
- [0] AssemblyInfo.cs文件介绍
AssemblyInfo.cs文件:包含程序版本.信息.版权的属性文件 先介绍AssemblyInfo.cs文件中的程序集属性 内容: using System.Reflection;using Sy ...
- 友盟分享到微信 监听不执行 监听只执行onStart,(onResult,onError,onCancel 不执行)
最近在做一个项目 有一个需求是要分享项目中的一个商品 这对于我来说简直是 so easy (项目是三个人一起写的) 正好看到之前有同事写完了 我就拿过来用吧 一顿复制粘贴 大功告成 这个是监 ...
- Python之数据加密与解密及相关操作(hashlib模块、hmac模块、random模块、base64模块、pycrypto模块)
本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...
- UE4 difference between servertravel and openlevel(多人游戏的关卡切换)
多人游戏的关卡切换分为无缝和非无缝.非无缝切换时,客户端将跟服务器断开连接,然后重新连接到同一个服务器,服务器则加载一个新地图.无缝切换不会发生这样的情况. 有三个函数供我们使用:UEngine::B ...