• 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

  • 相关阅读:
    Mysql删除数据库中所有表
    MySQL出现2059错误
    .NetCore笔记
    PLSql中文乱码
    Oracle误删除数据恢复。Oracle删除后恢复数据
    ora-28000:the account is locked,Oracle修改密码有效期,Oracle设置密码不过期
    Linux 常用命令
    Razor
    ORA-01578: ORACLE 数据块损坏 (文件号 13, 块号 2415081) ORA-01110: 数据文件XXXXXX
    ORA-01033:ORACLE initialization or shutdown
  • 原文地址:https://www.cnblogs.com/LittleFeiHu/p/7352434.html
Copyright © 2020-2023  润新知