Pour un meilleur travail de test avec Microsoft.Owin.Testing.TestServer
, J'ai trouvé que Global.asax n'est pas chargé avec Owin TestServer.
Donc, j'essaie de déplacer mes configurations Global.asax vers Startup.cs comme ci-dessous,
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);
}
}
Mais TestServer
échec pour initialiser à chaque point de configuration tel que AreaRegistration.RegisterAllAreas
, FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)
, etc. ...
La migration viable minimum (test réussi avec TestServer) pour moi est comme ci-dessous.
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);
}
}
Est-il possible de déplacer toutes les configurations vers Startup.cs?
Comme vous le savez déjà, OwinContext
consommé par Startup.Configuration()
est différent du ASP.NET traditionnel HttpContext
consommé par MvcApplication.Application_Start()
. Les deux utilisent des pipelines de contexte différents. Plus précisément, ASP.NET MVC repose toujours sur System.Web.dll
Contrairement à l'API Web ASP.NET.
Par conséquent, en fonction de votre code, certaines méthodes généralement présentées dans MvcApplication.Application_Start()
ne peuvent pas être exécutées dans Startup.Configuration()
:
AreaRegistration.RegisterAllAreas();
: Cette méthode repose sur System.Web.dll
.RouteConfig.RegisterRoutes(RouteTable.Routes);
: RouteCollection
fait partie de System.Web.dll
.GlobalConfiguration.Configure(WebApiConfig.Register)
: Encore une fois, RouteCollection
dans WebApiConfig.Register()
fait partie de System.Web.dll
.Pour le routage d'URL dans le contexte OWIN, AttributeRouting
est recommandé. Donc, au lieu de cela, essayez config.MapHttpAttributeRoutes();
Cela vous donnera beaucoup de liberté.
Si vous souhaitez toujours exécuter AreaRegistration.RegisterAllAreas();
dans le contexte OWIN, Startup.Configuration()
, je vous recommande d'importer bibliothèque Katana . Cela intègre OWIN avec System.Web.dll
De sorte que vous archivez probablement votre objectif.
HTH