Как класс 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 и как он обнаружен здесь.