这是我对启动/托管Web应用程序的演变方式的理解,因为这一切令人困惑。一个小总结:
1.经典的ASP.NET:仅编写在强制性IIS管道的最后一步中运行的应用程序代码
2.带OWIN的ASP.NET:配置.NET Web服务器并编写应用程序代码。不再直接与IIS耦合,因此您不再被迫使用它。
3. ASP.NET Core:配置主机和Web服务器以使用和编写您的应用程序代码。如果您以.NET Core而不是完整的.NET Framework为目标,则不再必须使用.NET Web服务器。
现在,我将详细介绍它的工作方式以及用于启动应用程序的类:
经典ASP.NET
经典的ASP.NET应用程序将Global.asax
文件作为入口点。这些应用程序只能在IIS中运行,并且您的代码将在IIS管道的末尾执行(因此IIS甚至在代码运行之前就由IIS负责CORS,身份验证)。从IIS 7开始,您可以在集成模式下运行应用程序,该模式将ASP.NET运行时集成到IIS中。这使您的代码可以配置以前(或仅在IIS本身中)无法实现的功能,例如在文件发生事件时重写URL或使用文件中的新部分。Application_Start
Global.asax
<system.webserver>
web.config
带OWIN的ASP.NET
首先,OWIN不是库,而是有关.NET Web服务器(例如IIS)如何与Web应用程序交互的规范。Microsoft本身有一个称为项目Katana的OWIN实现(通过几个不同的NuGet软件包分发)。该实现提供了IAppBuilder
您在Startup
类中遇到的接口以及Microsoft提供的一些OWIN中间件组件(OMC)。使用IAppBuilder
您基本上是通过即插即用的方式编写中间件来为Web服务器创建管道的(除了上面提到的IIS7 +中的ASP.NET管道之外),而不是绑定到IIS管道(但是现在您使用一个用于CORS的中间件组件,一个用于身份验证的中间件组件...)。因此,您的应用程序不再专门与IIS耦合,您可以在任何.NET Web服务器上运行它,例如:
使所有事情变得令人困惑的是,Global.asax
OWIN Startup
类仍然支持它们,尽管它们都可以做类似的事情。例如,您可以Global.asax
使用OWIN中间件来实现CORS 并进行身份验证,这真的很令人困惑。
我的经验法则是一起删除Global.asax
文件,以便在Startup
需要添加OWIN时使用。
ASP.NET核心
ASP.NET Core是下一步的发展,现在您可以定位.NET Core或完整的.NET Framework。以.NET Core为目标时,您可以在支持.NET Standard的任何主机上运行应用程序。这意味着您不再受限于.NET Web服务器(如前所述),而是可以将应用程序托管在Docker容器,Linux Web服务器,IIS ...中。
ASP.NET Core Web应用程序的入口点是Program.cs
文件。在此配置主机,然后再次Startup
在配置管道的位置指定类。使用OWIN(通过IAppBuilder.UseOwin
扩展方法)是可选的,但完全受支持。
AreaRegistration.RegisterAllAreas();
对我造成了错误,因为不允许在启动期间仅在中使用此方法Application_Start
。但是,我的应用程序是一个API,此方法显然仅对MVC应用程序有用:stackoverflow.com/questions/18404637/…–