gpt4 book ai didi

c# - Startup 类是如何发挥作用的?

转载 作者:行者123 更新时间:2023-11-30 14:10:36 28 4
gpt4 key购买 nike

我一直在查看 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))]

现在这个类只用在 auth Controller 上,但基本上它只用于构建用户管理器并获取 OAuthOptions.AccessTokenFormatPublicClientId 信息。

在该设置中,类仅用于提供这些信息。那么,这个类是如何真正发挥作用的呢?我真的不明白 Owin 和这个显然只是提供配置信息的类之间的关系。

最佳答案

您需要将组件添加到 Owin 应用程序管道中以处理 HTTP 请求,否则什么也不会发生:(

Owin采用Convention over configuration的软件设计原则假设您的项目有一个名为 Startup 的类,带有一个名为 Configuration 的方法,该方法接受一个类型为 IAppBuilder 的参数,这将添加组件进入 Owin 应用程序管道。这背后的目的是让您(程序员)更快、更轻松地进行设置,以便您可以花更多时间创建 API。

如果出于任何原因您不能完全遵循 Startup 类约定,可以使用其他方法将 Owin 指向将组件添加到 Owin 应用程序管道中的代码。您已经确定了其中一种方法:OwinStartup 属性。

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

您可以阅读更多关于 OWIN 启动类的功能以及如何检测它的信息 here .

关于c# - Startup 类是如何发挥作用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23282693/

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