我是否需要一个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中保留其他代码的主要原因是:
- 与以前版本的MVC保持一致。 (这是每个人目前希望find这个代码的地方。)
- 能够添加其他事件处理程序。 在Global.asax中,您可以处理其他方法,如Session_Start和Application_Error。
- 在各种身份validationscheme中的正确性。 只有当您的bin目录中有Microsoft.Owin.Host.SystemWeb.dll时才会调用Startup.Configuration方法。 如果你删除这个DLL,它会默默地停止调用Startup.Configuration,这可能很难理解。
我认为第三个原因是我们没有采取这种方法默认情况下最重要的,因为有些情况下不包括有这个DLL,并且能够改变身份validation方法而不会使无关的代码(如路线注册)被放置。
但是,如果这些原因都不适用于您的情况,我想你会很好的使用这种方法。
对于那些寻找完整的步骤:如果你正在寻找创build一个基于OWIN,IIS托pipe的Web API,这些步骤应该让你在那里:
-
File -> New -> Project
- 在对话框中,
Installed -> templates -> Other Project types -> Visual Studio Solutions -> Blank Solution targeting .NET 4.6
-
在解决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
-
安装下列软件包:
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方法对其进行注释,并且您应该很好