gpt4 book ai didi

asp.net-web-api - OWIN中间件使用实例

转载 作者:行者123 更新时间:2023-12-02 18:08:25 27 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

7年前关闭。




Improve this question




我认为我自己是 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的 future 在哪里?
    那案子?
  • 到目前为止,我看到的唯一详细的实际用法是
    使用 OWIN 使用 OAuth 2 进行身份验证。任何其他此类用途
    在中间保留一个 OWIN 实现?
  • 在我的启动类的配置方法中,我尝试简单地链接
    中间件代码片段如下,并且能够看到请求
    正在发送:-
    enter image description here

  • 但出现错误:

    enter image description here

    如何查看传入的请求并为中间件中的下一个组件修改它?
  • 你插入的各种中间件有哪些
    在 Web 服务器和应用程序之间的项目中?

  • 感谢您回答上述任何或所有问题。

    最佳答案

    What can I use OWIN middleware for that I couldn't already do using message handlers or HTTP modules? Or are they both the same thing except that the latter two are tightly coupled with IIS?



    与 IIS 解耦是其中的一部分。 OWIN 中间件是一个管道,它允许某些“OWIN 感知”的事物参与到请求中,如果他们愿意的话。 IHttpHandler 只处理一件事——它们不是可链接的。我更喜欢将管道与 Global.asax 进行比较。我见过很多填充的 Global.asax 处理程序做各种各样的事情,比如身份验证、授权、吐出 HTTP header (如 P3P 策略、X-Frame-Options 等)。其中的部分问题是开发可重用的组件很难并且依赖于 IIS。 OWIN 试图消除这些问题。

    A lot of the documentation says OWIN allows for decoupling between the web server and web application ie. removing dependency on IIS for hosting say Web API applications. But I have yet to see an example of some web application or web api that used OWIN and was successfully ported from being hosted on IIS and then some other web server. So is IIS and self hosting the only way to go for this decoupling between web server and web app?



    这对于 WebAPI 2 和 SignalR 2 来说是正确的。MVC 5 和更早版本目前还不能真正与 IIS 分离。 MVC 6 将解决这个问题,并且是一个相当大的改革。 ASP.NET 网站有一个 tutorial or two在控制台应用程序上的 SignalR 自托管。您将在教程中看到 Startup类,就像它在 IIS 或 IIS Express 上运行一样。控制台应用程序唯一不同的是它使用 Main 中的 HttpListener 引导服务器。方法。

    [comment] With respect to point #2 above, what are the owin components here? Is Katana an owin component or is it the code we write using Katana or both put together?



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

    When I searched for OWIN middleware examples, I only got Katana and Helios which are the only two implementations of the OWIN spec. Katana is almost done with and wont go beyond revision3 and Helios is not yet supported by Microsoft as per some articles. So what is the future of OWIN in that case?



    这仍然有点悬而未决,但 OWIN 被用于开发允许 ASP.NET 5 Core 在 Linux/OS X 上运行的 Kestrel Web 服务器。

    The only detailed practical usage I have seen so far is that of using OWIN for authentication using OAuth 2. Any other such usages of keeping an OWIN implementation in the middle?



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

    Any other such usages of keeping an OWIN implementation in the middle?



    平台独立性。将 OWIN 放在中间意味着我可以将我的 MVC 6 核心 Web 应用程序从在 IIS 上运行的 xcopy 复制到我的 Mac 上的 Kestrel,而 OWIN 实现会负责其余的工作。

    In my startup class's Configuration method I tried to chain simple middleware code snippets as below and to be able to see the request being sent in.


    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来自请求,或 Headers如果你想要一个 HTTP header 。

    What are the various kinds of middle ware that you have plugged-in in your projects between the web server and application?



    处理安全的东西,比如在内容安全策略中处理随机数的中间件组件,我在我的个人博客 here 上写过.它的要点是它允许我添加一个带有 nonce 的 HTTP header :

    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 View 中,我可以将 nonce 添加到 <script>元素从 owin 上下文中获取 token 。

    它还有很多其他用途。其他框架现在可以轻松地将自己注入(inject)到请求/响应过程中。 NancyFx框架现在可以使用 OWIN。

    关于asp.net-web-api - OWIN中间件使用实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632406/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com