Owin Middleware如何在IIS集成管道中执行
2018-06-22 07:51:17来源:未知 阅读 ()
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
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 如何在ASP.NET Core类库项目中读取配置文件详解 2019-12-31
- 如何在C#中使用SQLite数据库 2019-08-26
- 如何在ASP.Net 中把图片存入数据库 2019-06-16
- asp.net 动态生成表格 2019-01-03
- .net core 2.0学习记录(四):Middleware使用以及模拟构建M 2018-06-22
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash