【问题标题】:How OWIN hooks on ASP.NET startupOWIN 如何挂钩 ASP.NET 启动
【发布时间】:2014-08-31 13:13:25
【问题描述】:

我一直在浏览和搜索诸如 OWIN 之类的东西是如何挂钩 ASP.NET 活动的。

我知道如果我们创建一个自托管的 OWIN,我们将手动调用它,很明显我们正在调用 OWIN 以使其开始运行。

但是,我看到在 ASP.NET 启动时会自动调用 OWIN,而无需调用 webapp start 或其他任何东西。 OWIN 只需挂接到 ASP.NET 并充当每个请求的拦截器。

我的例子是signalr,我们在OWIN配置方法中调用signalr的映射。但是,我没有看到任何可能调用 OWIN 配置方法的东西。但是信号器已经被映射并且可以工作了。

OWIN 如何挂钩 ASP.NET 活动?是 OWIN 注册了 hooks 还是 ASP.NET 现在可以识别 OWIN 并自动调用?

【问题讨论】:

    标签: asp.net asp.net-mvc iis owin


    【解决方案1】:

    您的项目中会出现类似这样的行:

    [assembly: OwinStartup(typeof(MyApp.Security.Authentication.Startup))]
    

    上面的行告诉.NET 将在开始时调用的类和方法。

    或者你可以在 WebConfig 中配置启动

    <appSettings>
    ...
    <add key="owin:appStartup" value="MyApp.Security.Authentication.Startup" />
    ...
    </appSettings>
    

    从那时起,您可以放置​​ OWIN 组件,以及通常放置在 Global.asax Application_Start 事件处理程序中的所有配置项。

    删除 Global.asax 类: 如果使用 OWIN,则无需使用 Gobal.asax 类并触发 Application_Start 事件,因此可以将其删除。

    Startup.cs 代码示例

    using System.Web.Http;
    using Microsoft.Owin;
    using Owin;
    
    [assembly: OwinStartup(typeof(MyApp.Security.Authentication.Startup))]
    namespace MyApp.Security.Authentication
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                HttpConfiguration config = new HttpConfiguration();
                WebApiConfig.Register(config);
                app.UseWebApi(config);
            }
        }
    }
    

    已编辑:

    OWIN 使用启动类,您可以在其中指定希望包含在应用程序管道中的组件。如果您查看Katana source code,Katana SystemWeb 主机使用PreApplicationStartMethodAttribute 挂钩到应用程序启动。 PreApplicationStartMethodAttribute 是在 .NET 4 中引入的,它允许您在应用程序启动时在 ASP.NET 管道中尽早运行代码。我的意思是很早,甚至在 Application_Start 之前。

    检查此link 和此link 中关于 PreApplicationStartMethodAttribute 的“Owin 启动类检测”部分。

    【讨论】:

    • 那么,ASP.NET升级了,一开始就搜索OWIN启动?我是否可以创建类似 OWIN 的框架,无需手动调用即可挂钩 ASP.NET 活动?
    • 据我了解,NuGet 包“Microsoft.Owin.Host.SystemWeb”负责此启动过程。 IIS 托管应用程序中的启动检测需要此包:asp.net/aspnet/overview/owin-and-katana/…
    • 我的问题是他们是怎么做到的,Microsoft.Owin.Host.SystemWeb 如你所说,如何挂钩 IIS 启动和 ASP.NET 活动。
    • 就是这样,PreApplicationStartMethodAttribute 是我一直在寻找的。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多