[英]Migrate Global.asax to Startup.cs
For better test job with Microsoft.Owin.Testing.TestServer
, I found that Global.asax is not loaded with Owin TestServer. 为了更好地使用Microsoft.Owin.Testing.TestServer
测试,我发现Global.asax没有加载Owin TestServer。
So, I try to move my Global.asax configurations to Startup.cs as below, 所以,我尝试将我的Global.asax配置移动到Startup.cs,如下所示,
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
// pasted Global.asax things start.
GlobalConfiguration.Configuration.Formatters.Clear();
var jsonSerializerSettings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
};
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter() { SerializerSettings = jsonSerializerSettings });
GlobalConfiguration.Configuration.Formatters.Add(new FormMultipartEncodedMediaTypeFormatter());
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// pasted Global.asax things end.
ConfigureAuth(app);
}
}
But TestServer
failed to initialize in every point of configuration such as AreaRegistration.RegisterAllAreas
, FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)
, so on... 但是TestServer
无法在每个配置点初始化,例如AreaRegistration.RegisterAllAreas
, FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)
,等等......
Minimum viable migration(successful test with TestServer) for me is as below. 对我来说,最小可行迁移(使用TestServer成功测试)如下所示。
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
config.Formatters.Clear();
var jsonSerializerSettings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
};
config.Formatters.Add(new JsonMediaTypeFormatter() { SerializerSettings = jsonSerializerSettings });
config.Formatters.Add(new FormMultipartEncodedMediaTypeFormatter());
WebApiConfig.Register(config); // moved from GlobalConfiguration.Configure(WebApiConfig.Register)
app.UseWebApi(config);
ConfigureAuth(app);
}
}
Is there anyway to move all configurations to Startup.cs? 反正有没有将所有配置移动到Startup.cs?
As you are already aware, OwinContext
consumed by Startup.Configuration()
is different from the traditional ASP.NET HttpContext
consumed by MvcApplication.Application_Start()
. 正如你已经知道, OwinContext
所消耗的Startup.Configuration()
是从传统的ASP.NET不同HttpContext
所消耗的MvcApplication.Application_Start()
Both are using different context pipelines. 两者都使用不同的上下文管道。 More specifically, ASP.NET MVC still relies on System.Web.dll
while ASP.NET Web API doesn't. 更具体地说,ASP.NET MVC仍然依赖于System.Web.dll
而ASP.NET Web API则不依赖。
Therefore, based on your code, some methods usually laid in MvcApplication.Application_Start()
can't be run within Startup.Configuration()
: 因此,根据您的代码,通常在MvcApplication.Application_Start()
放置的一些方法无法在Startup.Configuration()
运行:
AreaRegistration.RegisterAllAreas();
: This method relies on System.Web.dll
. :此方法依赖于System.Web.dll
。 RouteConfig.RegisterRoutes(RouteTable.Routes);
: RouteCollection
is a part of System.Web.dll
. : RouteCollection
是System.Web.dll
的一部分。 GlobalConfiguration.Configure(WebApiConfig.Register)
: Again, RouteCollection
within WebApiConfig.Register()
is a part of System.Web.dll
. GlobalConfiguration.Configure(WebApiConfig.Register)
同样, RouteCollection
内WebApiConfig.Register()
是其中一部分System.Web.dll
。 For URL routing within OWIN context, AttributeRouting
is recommended. 对于OWIN上下文中的URL路由,建议使用AttributeRouting
。 So, instead of this, try config.MapHttpAttributeRoutes();
所以,不要这样,尝试config.MapHttpAttributeRoutes();
That will give you much freedom. 这会给你很大的自由。
If you still want to run AreaRegistration.RegisterAllAreas();
如果你还想运行AreaRegistration.RegisterAllAreas();
within OWIN context, Startup.Configuration()
, I'd better recommend to import Katana library . 在OWIN上下文中, Startup.Configuration()
,我最好建议导入Katana库 。 This integrates OWIN with System.Web.dll
so that you probably archieve your goal. 这将OWIN与System.Web.dll
集成在一起,这样您就可以实现目标。
HTH HTH
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.