将Global.asax迁移到Startup.cs

为了更好地使用Microsoft.Owin.Testing.TestServer,我发现Global.asax没有加载Owin-TestServer

因此,我尝试将我的Global.asax配置移动到Startup.cs,如下所示

公共部分类启动
{
公共无效配置(IAppBuilder应用程序)
{
//粘贴的Global.asax启动。
GlobalConfiguration.Configuration.Formatters.Clear();
var jsonSerializerSettings=新的jsonSerializerSettings
{
PreserveReferencesHandling=PreserveReferencesHandling.Objects,
ReferenceLoopHandling=ReferenceLoopHandling.Ignore,
};
GlobalConfiguration.Configuration.Formatters.Add(新的JsonMediaTypeFormatter(){SerializerSettings=jsonSerializerSettings});
GlobalConfiguration.Configuration.Formatters.Add(新的formMultipartncodedMediaTypeFormatter());
RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//粘贴Global.asax事件结束。
ConfigureAuth(app);
}
}

但是TestServer未能在每个配置点进行初始化,例如AreaRegistration.RegisteralareasFilterConfig.RegisterGlobalFilters(GlobalFilters.Filters),等等

我的最低可行迁移(使用TestServer成功测试)如下所示

公共部分类启动
{
公共无效配置(IAppBuilder应用程序)
{
var config=新的HttpConfiguration();
config.Formatters.Clear();
var jsonSerializerSettings=新的jsonSerializerSettings
{
PreserveReferencesHandling=PreserveReferencesHandling.Objects,
ReferenceLoopHandling=ReferenceLoopHandling.Ignore,
};
添加(新的JsonMediaTypeFormatter(){SerializerSettings=jsonSerializerSettings});
添加(新的formMultipartncodedMediaTypeFormatter());
WebApiConfig.Register(config);//从GlobalConfiguration.Configure(WebApiConfig.Register)移动
app.UseWebApi(配置);
ConfigureAuth(app);
}
}

是否要将所有配置移动到Startup.cs

如您所知,Startup.Configuration()使用的OwinContextmvcapapplication.Application\u Start()使用的传统ASP.NETHttpContext不同。两者都使用不同的上下文管道。更具体地说,ASP.NET MVC仍然依赖于System.Web.dll,而ASP.NET Web API则不依赖

因此,根据您的代码,mvcapapplication.Application\u Start()中通常包含的一些方法无法在Startup.Configuration()中运行:

  • AreaRegistration.RegisterAllAreas():此方法依赖于System.Web.dll
  • RouteConfig.RegisterRoutes(RouteTable.Routes):RouteCollectionSystem.Web.dll的一部分
  • GlobalConfiguration.Configure(WebApiConfig.Register):同样,WebApiConfig.Register()中的RouteCollectionSystem.Web.dll的一部分

对于OWIN上下文中的URL路由,建议使用AttributeRouting。因此,请尝试config.MapHttpAttributeRoutes()这将给你更多的自由

如果仍要运行AreaRegistration.RegisterAllEAS()在OWIN上下文中,Startup.Configuration(),我最好建议导入Katana库。这将OWIN与System.Web.dll集成在一起,这样您就有可能实现您的目标

发表评论