Migrar Global.asax a Inicio.cs


Para un mejor trabajo de prueba con Microsoft.Owin.Testing.TestServer, encontré que Global.asax no está cargado con Owin TestServer.

Por lo tanto, trato de mover mi Global.configuraciones asax al inicio.cs como se indica a continuación,

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);
    }
}

Pero TestServer falló para inicializar en cada punto de configuración como AreaRegistration.RegisterAllAreas, FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters), así sucesivamente...

La migración mínima viable(prueba exitosa con TestServer) para mí es la siguiente.

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);
    }
}

Existe de todos modos para mover todas las configuraciones al inicio.cs?

Author: Youngjae, 2014-07-30

1 answers

Como ya saben, OwinContext consumido por {[1] } es diferente del tradicional ASP.NET HttpContext consumido por MvcApplication.Application_Start(). Ambos están usando diferentes canalizaciones de contexto. Más concretamente, ASP.NET MVC todavía se basa en System.Web.dll mientras ASP.NET Web API no lo hace.

Por lo tanto, basado en su código, algunos métodos generalmente establecidos en MvcApplication.Application_Start() no se pueden ejecutar dentro de Startup.Configuration():

  • AreaRegistration.RegisterAllAreas();: Este método se basa en System.Web.dll.
  • RouteConfig.RegisterRoutes(RouteTable.Routes);: RouteCollection forma parte de System.Web.dll.
  • GlobalConfiguration.Configure(WebApiConfig.Register): De nuevo, RouteCollection dentro de WebApiConfig.Register() es una parte de System.Web.dll.

Para el enrutamiento de URL dentro del contexto de OWIN, se recomienda AttributeRouting. Así que, en lugar de esto, intenta config.MapHttpAttributeRoutes(); Que te dará mucha libertad.

Si todavía desea ejecutar AreaRegistration.RegisterAllAreas(); dentro del contexto de OWIN, Startup.Configuration(), mejor recomiendo importar Katana library. Esto integra a OWIN con System.Web.dll para que probablemente consigas tu objetivo.

HTH

 41
Author: JustInChronicles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-01 12:45:06