我是否需要一个Global.asax.cs文件,如果我正在使用一个OWIN Startup.cs类并移动所有的configuration?

举个例子,在MVC w / Individual Accounts模板制作的全新ASP.NET MVC 5应用程序中,如果我删除了Global.asax.cs类,并将其configuration代码移到Startup.cs Configuration()方法中,有什么缺点?

 public partial class Startup { public void Configuration(IAppBuilder app) { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); ConfigureAuth(app); } } 

对我来说,好处是当将ASP.NET 4应用程序升级到ASP.NET 5并使用现在必须在Startup.cs类中configuration的部分时,我不会在两个不同的类中进行dependency injection和其他configuration,启动和configuration。

Startup.Configuration比Application_Start稍微晚一点被调用,但是在大多数情况下,我不认为这种差别会很重要。

我相信我们在Global.asax中保留其他代码的主要原因是:

  1. 与以前版本的MVC保持一致。 (这是每个人目前希望find这个代码的地方。)
  2. 能够添加其他事件处理程序。 在Global.asax中,您可以处理其他方法,如Session_Start和Application_Error。
  3. 在各种身份validationscheme中的正确性。 只有当您的bin目录中有Microsoft.Owin.Host.SystemWeb.dll时才会调用Startup.Configuration方法。 如果你删除这个DLL,它会默默地停止调用Startup.Configuration,这可能很难理解。

我认为第三个原因是我们没有采取这种方法默认情况下最重要的,因为有些情况下不包括有这个DLL,并且能够改变身份validation方法而不会使无关的代码(如路线注册)被放置。

但是,如果这些原因都不适用于您的情况,我想你会很好的使用这种方法。

对于那些寻找完整的步骤:如果你正在寻找创build一个基于OWIN,IIS托pipe的Web API,这些步骤应该让你在那里:

  1. File -> New -> Project
  2. 在对话框中, Installed -> templates -> Other Project types -> Visual Studio Solutions -> Blank Solution targeting .NET 4.6
  3. 在解决scheme上,右键单击,添加Project -> Web -> ASP.NET Web Application (面向.NET 4.6)

    3.1现在在ASP.NET 4.5模板中,selectEmpty作为模板

    3.2这将创build一个包含两个nuget包的空白解决scheme:

     Microsoft.CodeDom.Providers.DotNetCompilerPlatform v 1.0.0 Microsoft.Net.Compilers v 1.0.0 
  4. 安装下列软件包:

     Install-Package Microsoft.AspNet.WebApi.WebHost -Version 5.2.3 Install-Package Microsoft.AspNet.WebApi -Version 5.2.3 Install-Package WebApiContrib.Formatting.Razor 2.3.0.0 

对于OWIN:

 Install-Package Microsoft.Owin.Host.SystemWeb Install-Package Microsoft.AspNet.WebApi.OwinSelfHost 

然后添加Startup.cs与configuration方法:

 [assembly:OwinStartup(typeof(namespace.Startup))] public class Startup { /// <summary> Configurations the specified application. </summary> /// <param name="app">The application.</param> public static void Configuration(IAppBuilder app) { var httpConfiguration = CreateHttpConfiguration(); app .UseWebApi(httpConfiguration); } /// <summary> Creates the HTTP configuration. </summary> /// <returns> An <see cref="HttpConfiguration"/> to bootstrap the hosted API </returns> public static HttpConfiguration CreateHttpConfiguration() { var httpConfiguration = new HttpConfiguration(); httpConfiguration.MapHttpAttributeRoutes(); return httpConfiguration; } } 

现在,添加一个inheritance自ApiController的类,使用RoutePrefix属性和Route + HttpGet/PutPost (表示您之后的Http动作)的action方法对其进行注释,并且您应该很好