zoukankan      html  css  js  c++  java
  • Owin Middleware如何在IIS集成管道中执行

    Owin Middleware Components(OMCs)

    通过安装Install-Package Microsoft.Owin.Host.SystemWeb

    可以让OMCs在IIS集成管道下工作

    在IIS集成管道里,这个request pipeline 包含HttpModules关联到一组预定义的管道事件,例如

    BeginRequest, AuthenticateRequest, AuthorizeRequest,等

    如果我们将OMC和HttpModule进行比较,OMC也和HttpModule一样,必须要被注册到一个恰当的预定义的管道事件里,比如下面的这个Httpmodule,

    当一个请求来到AuthenticateRequest阶段时,MyModule会被调用

    public class MyModule : IHttpModule
    {
        public void Dispose()
        {
            //clean-up code here.
        }
        public void Init(HttpApplication context)
        {
            // An example of how you can handle AuthenticateRequest events.
            context.AuthenticateRequest += ctx_AuthRequest;
        }
        void ctx_AuthRequest(object sender, EventArgs e)
        {
            // Handle event.
        }
    }
    

     为了使OMC取参与和HttpModule相同的基于事件的执行顺序,Katana运行时代码扫描Startup配置,并且把每个OMC关联到某个集成管道事件里,

    比如下面的配置:

    using System;
    using System.Threading.Tasks;
    using Microsoft.Owin;
    using Owin;
    using System.Web;
    using System.IO;
    using Microsoft.Owin.Extensions;
    [assembly: OwinStartup(typeof(owin2.Startup))]
    namespace owin2
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.Use((context, next) =>
                {
                    PrintCurrentIntegratedPipelineStage(context, "Middleware 1");
                    return next.Invoke();
                });
                app.Use((context, next) =>
                {
                    PrintCurrentIntegratedPipelineStage(context, "2nd MW");
                    return next.Invoke();
                }); 
                app.Run(context =>
                {
                    PrintCurrentIntegratedPipelineStage(context, "3rd MW");
                    return context.Response.WriteAsync("Hello world");
                });            
            }
            private void PrintCurrentIntegratedPipelineStage(IOwinContext context, string msg)
            {
                var currentIntegratedpipelineStage = HttpContext.Current.CurrentNotification;
                context.Get<TextWriter>("host.TraceOutput").WriteLine(
                    "Current IIS event: " + currentIntegratedpipelineStage
                    + " Msg: " + msg);
            }
        }
    }
    

     输出如下:

    Current IIS event: PreExecuteRequestHandler Msg: Middleware 1
    Current IIS event: PreExecuteRequestHandler Msg: 2nd MW
    Current IIS event: PreExecuteRequestHandler Msg: 3rd MW
    

     可以看到Katana运行时默认映射每个OMC到IIS管道事件PreRequestHandlerExecute

    你可以根据需要调整这个OMC和管道事件的这种默认关系,具体使用一个扩展方法IAppBuilder UseStageMarker(),

    像下面这样:

    public void Configuration(IAppBuilder app)
    {
        app.Use((context, next) =>
        {
            PrintCurrentIntegratedPipelineStage(context, "Middleware 1");
            return next.Invoke();
        });
        app.Use((context, next) =>
        {
            PrintCurrentIntegratedPipelineStage(context, "2nd MW");
            return next.Invoke();
        });
        app.UseStageMarker(PipelineStage.Authenticate);
        app.Run(context =>
        {
            PrintCurrentIntegratedPipelineStage(context, "3rd MW");
            return context.Response.WriteAsync("Hello world");
        });
        app.UseStageMarker(PipelineStage.ResolveCache);
    }
    

     输出如下:

    Current IIS event: AuthenticateRequest Msg: Middleware 1
    Current IIS event: AuthenticateRequest Msg: 2nd MW
    Current IIS event: ResolveRequestCache Msg: 3rd MW
    

    https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline

  • 相关阅读:
    [翻译] REMenu
    图片切换的效果
    刮奖效果
    粒子雪花效果
    Shimmer辉光动画效果
    解决Bootstrap 标签页(Tab)插件切换echarts不显示问题
    主要是解决,作为一个数据共享的数据库,存在的数据库统计,然后将计算的数据量输出到自己使用的数据库,进行主页面展示。
    使用kettle来根据时间戳或者批次号来批量导入数据,达到增量的效果。
    使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间。
    mysql根据分组和条件查询以后如何统计记录的条数
  • 原文地址:https://www.cnblogs.com/LittleFeiHu/p/7352434.html
Copyright © 2011-2022 走看看