You*_*jae 29 c# asp.net unit-testing asp.net-mvc-4 asp.net-web-api2
为了更好地测试工作Microsoft.Owin.Testing.TestServer,我发现Global.asax没有加载Owin TestServer.
所以,我尝试将我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
但TestServer 没到配置的每一点初始化,如AreaRegistration.RegisterAllAreas,FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters),等...
对我来说,最小可行迁移(使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
反正有没有将所有配置移动到Startup.cs?
jus*_*yoo 46
正如你已经知道,OwinContext消耗的Startup.Configuration()是从传统的ASP.NET不同HttpContext的消耗MvcApplication.Application_Start().两者都使用不同的上下文管道.更具体地说,ASP.NET MVC仍然依赖于System.Web.dllASP.NET Web API.
因此,根据您的代码,通常存在的一些方法MvcApplication.Application_Start()无法在以下内容中运行Startup.Configuration():
AreaRegistration.RegisterAllAreas();:这种方法依赖于System.Web.dll.RouteConfig.RegisterRoutes(RouteTable.Routes);:RouteCollection是的一部分System.Web.dll.GlobalConfiguration.Configure(WebApiConfig.Register):同样,RouteCollection内在WebApiConfig.Register()是一部分System.Web.dll.对于OWIN上下文中的URL路由,AttributeRouting建议使用.所以,不要这样,尝试config.MapHttpAttributeRoutes();那会给你很大的自由.
如果您仍想AreaRegistration.RegisterAllAreas();在OWIN环境中运行Startup.Configuration(),我最好建议导入Katana库.这将OWIN集成在一起,System.Web.dll以便您可以实现目标.
HTH
| 归档时间: |
|
| 查看次数: |
28754 次 |
| 最近记录: |