首页 文章

OWIN中间件使用的实际例子[关闭]

提问于
浏览
13

我认为自己是OWIN的初级新手,在阅读了大量文档之后,我对比起之前的冲突概念感到困惑 . 我知道这些是多个问题,但我觉得回答这些问题将清除对OWIN以及如何最好地使用它的最基本的疑问 . 这是我的问题:

  • 我可以使用OWIN中间件,我还没有使用消息处理程序或HTTP模块吗?或者它们是否相同,只是后两者与IIS紧密耦合?

  • 许多文档说OWIN允许在Web服务器和Web应用程序之间进行分离,即 . 删除依赖IIS来托管说Web API应用程序 . 但我还没有看到一些使用OWIN的Web应用程序或web api的示例,并成功移植到IIS上,然后是其他一些Web服务器 . IIS和自托管是唯一的方法来实现Web服务器和Web应用程序之间的这种分离吗?

  • 当我搜索OWIN中间件示例时,我只获得了Katana和Helios,这是OWIN规范中唯一的两个实现 . Katana几乎已经完成并且不会超出版本3,并且根据一些文章,微软尚不支持Helios . 那么在这种情况下OWIN的未来是什么?

  • 到目前为止,我所看到的唯一详细的实际用法是使用OAW进行身份验证的OWIN 2.还有其他任何将OWIN实现保留在中间的用法吗?

  • 在我的启动类的配置方法中,我尝试将简单的中间件代码片段链接如下,并且能够看到发送的请求: -
    enter image description here

但是有错误:

enter image description here

如何查看请求并为中间件中的下一个组件修改它?

  • 您在Web服务器和应用程序之间插入项目的各种中间件有哪些?

感谢您回答上述任何或所有这些问题 .

1 回答

  • 13

    我可以使用OWIN中间件,我还没有使用消息处理程序或HTTP模块吗?或者它们是否相同,只是后两者与IIS紧密耦合?

    与IIS分离是其中的一部分 . OWIN中间件是一个管道,允许某些“OWIN意识”的东西参与请求,如果他们选择的话 . IHttpHandler只处理一件事 - 它们不能连锁 . 我喜欢将管道更多地与Global.asax进行比较 . 我已经看到很多填充的Global.asax处理程序执行各种各样的事情,如身份验证,授权,吐出HTTP标头,如P3P策略,X-Frame-Options等 . 部分问题是从中开发可重用的组件很困难,依赖于IIS . OWIN试图消除这些问题 .

    很多文档都说OWIN允许在Web服务器和Web应用程序之间进行分离 . 删除依赖IIS来托管说Web API应用程序 . 但我还没有看到一些使用OWIN的Web应用程序或web api的示例,并成功移植到IIS上,然后是其他一些Web服务器 . IIS和自托管是唯一的方法来实现Web服务器和Web应用程序之间的这种分离吗?

    那个's true for WebAPI 2 and SignalR 2. MVC 5 and older can'目前真的与IIS分离了 . MVC 6将解决这个问题,并且是一个相当大的改革 . ASP.NET网站在控制台应用程序上的SignalR自托管上有一个tutorial or two . 您将在教程中看到 Startup 类,就像它在IIS或IIS Express上运行一样 . Console App唯一不同的功能是它在 Main 方法中使用HttpListener引导服务器 .

    [评论]关于上面第2点,这里的owin组件是什么? Katana是一个owin组件,还是我们使用Katana或两者组合在一起的代码?

    在Web应用程序和Web服务器之间,OWIN实际上并不是一个抽象层,实际上是一个规范 . 根据您要运行的服务器,OWIN有不同的“实现”--Katana是运行WebAPI 2和SignalR 2的OWIN实现.Kestrel是OWIN实现的另一个示例 .

    当我搜索OWIN中间件示例时,我只获得了Katana和Helios,这是OWIN规范中唯一的两个实现 . Katana几乎已经完成并且不会超出版本3,并且根据一些文章,微软尚不支持Helios . 那么在这种情况下OWIN的未来是什么?

    那还是一个在空中,但OWIN正用于开发Kestrel Web服务器,允许ASP.NET 5 Core在Linux / OS X上运行 .

    到目前为止,我所看到的唯一详细的实际用法是使用OAW进行身份验证的OWIN 2.还有其他任何将OWIN实现保留在中间的用法吗?

    SignalR和WebAPI也使用OWIN . 这很有用,因此您可以将SignalR Hub作为Windows服务运行,对于Web API也是如此 .

    还有其他任何将OWIN实施保留在中间的用法吗?

    平台独立 . 将OWIN放在中间意味着我可以将我的MVC 6 Core Web应用程序从IIS上运行到我的Mac上的Kestrel,并且OWIN实现负责其余部分 .

    在我的启动类的配置方法中,我尝试将简单的中间件代码片段链接如下,以便能够看到正在发送的请求 .

    context.Request 在OWIN中没有索引器 . 请改用 Get<>

    app.Use(async (context, next) =>
    {
        context.Response.Write("hello world 2: " + context.Request.Get<object>("owin.RequestBody"));
        await next();
    });
    

    请注意, owin.RequestBody 是一个实现细节,实际的返回类型是内部的 . 我不确定你想要获得什么,如果你想要一个查询字符串,请使用请求中的 Query ,如果你想要一个HTTP头,则使用 Headers .

    在Web服务器和应用程序之间插入项目的各种中间件有哪些?

    处理安全性的事情,就像处理内容安全策略中的nonce的中间件组件,我在我的个人博客here上写过 . 它的要点是它允许我添加带有nonce的HTTP头:

    public void Configuration(IAppBuilder app)
    {
        app.Use((context, next) =>
        {
            var rng = new RNGCryptoServiceProvider();
            var nonceBytes = new byte[16];
            rng.GetBytes(nonceBytes);
            var nonce = Convert.ToBase64String(nonceBytes);
            context.Set("ScriptNonce", nonce);
            context.Response.Headers.Add("Content-Security-Policy",
                new[] {string.Format("script-src 'self' 'nonce-{0}'", nonce)});
            return next();
        });
        //Other configuration...
    }
    

    从那里,在我的Razor视图中,我可以将随机数添加到 <script> 元素,从owin上下文中获取令牌 .


    还有很多其他东西可供使用 . 其他框架现在可以轻松地将自己注入到请求/响应过程中 . NancyFx框架现在可以使用OWIN .

相关问题