Как класс Startup входит в игру?

Я смотрел на проект ASP.NET Web API по умолчанию, который поставляется с аутентификацией ASP.NET Identity и использует Owin. Я гуглил об этом и увидел, что Owin предназначен для отделения приложения от сервера и что его функциональность основана на Startup класс, который действительно выходит из проекта. Класс разбит на два файла и выглядит так

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
    }
}

public partial class Startup
{
    static Startup()
    {
        PublicClientId = "self";

        UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());

        OAuthOptions = new OAuthAuthorizationServerOptions
        {
            TokenEndpointPath = new PathString("/Token"),
            Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
            AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
            AllowInsecureHttp = true
        };
    }

    public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

    public static Func<UserManager<IdentityUser>> UserManagerFactory { get; set; }

    public static string PublicClientId { get; private set; }

    // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
    public void ConfigureAuth(IAppBuilder app)
    {
        // Enable the application to use a cookie to store information for the signed in user
        // and to use a cookie to temporarily store information about a user logging in with a third party login provider
        app.UseCookieAuthentication(new CookieAuthenticationOptions());
        app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

        // Enable the application to use bearer tokens to authenticate users
        app.UseOAuthBearerTokens(OAuthOptions);

        // Uncomment the following lines to enable logging in with third party login providers
        //app.UseMicrosoftAccountAuthentication(
        //    clientId: "",
        //    clientSecret: "");

        //app.UseTwitterAuthentication(
        //    consumerKey: "",
        //    consumerSecret: "");

        //app.UseFacebookAuthentication(
        //    appId: "",
        //    appSecret: "");

        //app.UseGoogleAuthentication();
    }
}

Первый файл, однако, выше пространства имен имеет эту строку

[assembly: OwinStartup(typeof(WebApplication1.Startup))]

Теперь этот класс используется только на контроллере аутентификации, но в основном он используется только для сборки менеджера пользователей и получения OAuthOptions.AccessTokenFormat а также PublicClientId Информация.

В этой настройке класс просто используется для предоставления этой информации. Итак, как этот класс действительно вступает в игру? Я действительно не понимаю отношения между Оуэном и этим классом, который, по-видимому, просто предоставляет информацию о конфигурации.

1 ответ

Вам нужно добавить компоненты в конвейер приложения Owin для обработки HTTP-запросов, иначе ничего не произойдет:(

Овин использует принцип разработки программного обеспечения Конвенции поверх конфигурации, чтобы предположить, что ваш проект имеет класс с именем Startupс помощью метода с именем Configuration, который принимает один параметр типа IAppBuilder, который добавит компоненты в конвейер приложения Owin. Цель этого состоит в том, чтобы сделать процесс настройки быстрее и проще для вас, программиста, чтобы вы могли тратить больше времени на создание своего API.

Если по какой-либо причине вы не можете следовать Startup Соглашение о классах. Существуют и другие методы, которые указывают Owin на код, который добавляет компоненты в конвейер приложения Owin. Вы определили один из этих методов: атрибут OwinStartup.

[assembly: OwinStartup(typeof(WebApplication1.Startup))]

Вы можете прочитать больше о том, что делает OWIN Startup Class и как он обнаружен здесь.

Другие вопросы по тегам