Owin kanata 学习笔记
2023-09-27 14:23:57 时间
参考 : http://www.cnblogs.com/neverc/p/4864414.html
参考 : http://www.cnblogs.com/JustRun1983/p/3955238.html (这个有1,2,3部分)
配合 IIS 安装Nuget Microsoft.Owin.Host.SystemWeb
Setup startup class
using System.Web.Mvc; using System.Web.Routing; using Microsoft.Owin; using Owin; using ProjectOwin; [assembly: OwinStartupAttribute(typeof(ProjectOwin.Startup))] namespace ProjectOwin { public partial class Startup { public void Configuration(IAppBuilder app) { //MVC setup AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); } } }
通过 assembly 来声明 class
<configuration> <appSettings> <add key="owin:appStartup" value="ProjectOwin.Startup" /> </appSettings> </configuration>
通过web config 来声明 class
写入一个 Middlerware
[assembly: OwinStartupAttribute(typeof(ProjectOwin.Startup))] namespace ProjectOwin { public class HelloMiddlerware : OwinMiddleware { public HelloMiddlerware(OwinMiddleware next): base(next){} public override Task Invoke(IOwinContext context) { context.Response.Write("Hello World!"); return Next.Invoke(context); } } public partial class Startup { public void Configuration(IAppBuilder app) { app.Use<HelloMiddlerware>(); } } }
app.Run 和 app.Use 的区别
app.Use<HelloMiddlerware>(); //Run是插入一个中间件,并终止继续往下流 app.Run(x => x.Response.WriteAsync("good")); //此中间件将不执行 app.Use<HelloMiddlerware>();
执行顺序
public partial class Startup { public void Configuration(IAppBuilder app) { app.Use((x, next) => { x.Response.ContentType = "text/html"; return next.Invoke(); }); app.Use((x, next) => { x.Response.WriteAsync("1 Before"); next.Invoke(); return x.Response.WriteAsync("1 After"); }); app.Use((x, next) => { x.Response.WriteAsync("2 Before"); next.Invoke(); return x.Response.WriteAsync("2 After"); }); app.Run(x => x.Response.WriteAsync("<br/>hello world<br/>")); //1 Before, 2 Before //hello world //2 After, 1 After } }
host, server, middleware, application
host 是一个 exe 进程,监听着 TCP 请求,然后判断后选择 server 处理请求
server 负责把请求转换成Owin字典传给 middleware
middleware 对请求加工或者设置一些系统逻辑,然后pass 给下一个 middleware
application 不是很清楚这个.
passing data
[assembly: OwinStartupAttribute(typeof(ProjectOwin.Startup))] namespace ProjectOwin { public class Abc { public string x { get; set; } } public class HelloMiddlerware : OwinMiddleware { public HelloMiddlerware(OwinMiddleware next) : base(next) { } public override Task Invoke(IOwinContext context) { context.Set<Abc>("key", new Abc { x = "5566" }); //使用 Get,Set Abc data = context.Get<Abc>("key"); return Task.FromResult(0); } } public partial class Startup { public void Configuration(IAppBuilder app) { app.Use<HelloMiddlerware>(); } } }
IOwinContent.Environment = 原始的 IDictionary<string, Object>
相关文章
- 多线程编程学习笔记——async和await(三)
- 多线程编程学习笔记——线程同步(一)
- 【学习笔记15】JavaScript的函数
- Dubbo -- 系统学习 笔记 -- 入门
- Pro Android学习笔记(一三七):Home Screen Widgets(3):配置Activity
- kali 服务篇-Apache服务 学习笔记
- 机器学习笔记之条件随机场(六)学习任务介绍(Learning)
- jenkins学习笔记第十篇下载Allure插件生成完美报告
- VS Code配置Matlab环境笔记-文本编辑、语法检查、运行脚本
- 《数据挖掘:理论与算法》学习笔记(七)—支持向量机
- 公众号开发笔记二
- Memcached 笔记与总结(6)PHP 实现 Memcached 的一致性哈希分布算法
- iOS学习笔记-自定义过渡动画
- Xcode 8 的 Debug 新特性 —- WWDC 2016 Session 410 & 412 学习笔记
- Linux下文件及文件夹权限(学习笔记版)
- STM32F412应用开发笔记之四:与远红外炭氢传感器通讯
- 【Redis入门笔记 05】Jedis 简介 & SpringBoot 集成
- JSP-Spring4学习笔记(三)bean强化
- JSP-Spring4学习笔记(一)入门概述
- scala编程第16章学习笔记(3)——List类的高阶方法
- 零基础学前端之HTML 速成【学习笔记】
- 安卓开发学习笔记(七):仿写腾讯QQ登录注册界面
- 【数据库学习笔记】——cursor游标对象
- 有限元分析笔记01-平面应力和平面应变
- UML时序图(Sequence Diagram)学习笔记
- HTML5 + CSS3 链接标签学习笔记(三)
- servlet中为什么doGet方法没有被调用的一种可能(笔记)
- Linux下汇编语言学习笔记32 ---
- Arduino学习笔记77
- Arduino学习笔记33
- 《IoU-Net: Acquisition of Localization Confidence for Accurate Object Detection》论文笔记