Startup类是否为每个服务器运行一个实例?

时间:2014-04-17 15:21:39

标签: asp.net-mvc asp.net-mvc-5

在VS 2013的MVC5模板中,有一个Startup类,由OwinStartupAttribute修饰而被调用。

我是否知道每个IIS或每次Http请求进来时是否运行此Startup类一次?

2 个答案:

答案 0 :(得分:0)

OWIN框架使用此属性指定的类来启动应用程序。请参阅本教程中的示例:http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection

答案 1 :(得分:0)

使用OwinStartupAttribute装饰的类每AppDomain执行一次。


另一方面,OWIN中间件由Microsoft的OWIN实现管理,每次请求将执行一次。

例如,Microsoft.Owin.Security.Cookies.CookieAuthenticationMiddleware如下所示。在封面下,对于服务器的每个请求,OWIN会多次为CookieAuthenticationHandler类创建类似图像,脚本,页面等内容。您可以在OnValidateIdentity内放置一个断点来查看此行为并查看Context.Request.Path

简而言之,在你的"创业"每AppDomain调用一次类,OnValidateIdentity之类的回调代理每个http请求都会触发一次。

public void ConfigureAuth(IAppBuilder app)
{
    // app.UseCookieAuthentication(...) is only called once per AppDomain
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login"),
        Provider = new CookieAuthenticationProvider
        {
            // callback delegate is called once per http request
            OnValidateIdentity = ctx =>
            {
                return ctx.RejectIdentity(); // Reject every identity. No one can log into my app! It's that secure.
                return Task.FromResult<object>(null);
            }
        }
    });
}