Owin kanata 学习笔记

参考 : 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>

 

posted @   兴杰  阅读(441)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 百万级群聊的设计实践
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
点击右上角即可分享
微信分享提示