如何将 ASP.NET MVC 网络应用程序的 identity/authentication 部分移动到 class 库中?

How can I move the identity/authentication part of my ASP.NET MVC web app into a class library?

我有一个 ASP.NET MVC 5 Web 应用程序,使用 ASP.NET Identity 2.1。我正在尝试将 Web 项目中的所有标识/授权代码移到 class 库中。

我移出了所有样板 UserManagerSigninManager 的东西,并从 Web 项目中删除了 ASP.NET Identity 和 OWIN 的所有 NuGet 包(将它们添加到 class图书馆)。

我还将 Startup.csStartup.Auth.cs 文件中的代码移到了我的 class 库中。这些包含 OWIN 配置内容。

我现在如何确保在应用程序启动时调用此代码?在原来的项目中,Startup class(在Startup.cs中)有这样一行:

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

我在我的 class 库中的等效文件中放置了类似的行(具有正确的 class 名称),但这似乎没有效果。这条线必须进入网络应用程序吗? (在这种情况下,大概我需要将 OWIN NuGet 包添加回 Web 项目——这是我希望避免的事情)。

我也尝试将此添加到我的 web.config 文件中:

<add key="owin:appStartup" value="MyClassLibrary.MyNamespace.Startup, My.DLL.Name" />

但是,我不确定如果没有 Web 项目中的某些东西触发它,那将如何工作 - 这又回到将 OWIN 添加到 Web 项目中。

我很困惑 - 任何帮助将不胜感激。

来自http://haacked.com/archive/2010/05/16/three-hidden-extensibility-gems-in-asp-net-4.aspx/

PreApplicationStartMethodAttribute

这个新属性允许您在应用程序启动时在 ASP.NET 管道的早期使用代码 运行。我的意思是很早,甚至在 Application_Start.

之前

PreApplicationStartMethodAttribute 是 Microsoft.Owin.Host.systemWeb 初始化的地方。因此,您需要在网络应用程序中添加对 Microsoft.Owin.Host.systemWeb 的引用。