route query mvc maphttproute attribute c# asp.net-mvc asp.net-mvc-4 asp.net-web-api

query - web api rest c#



¿Por qué obtengo una excepción InvalidOperationException cuando intento usar el enrutamiento de atributos con Web API 2? (2)

Comente o elimine esta línea de código en WebApiConfig :

config.MapHttpAttributeRoutes();

Acabo de actualizar mis paquetes de API web en mi aplicación MVC 4 para poder usar el enrutamiento de atributos. Cuando agrego config.MapHttpAttributeRoutes() un error que dice " El objeto aún no se ha inicializado. Asegúrese de que HttpConfiguration.EnsureInitialized () se llame en el código de inicio de la aplicación después de todos los demás códigos de inicialización". Si config.MapHttpAttributeRoutes() y los atributos de ruta, todo funciona como lo hacía antes. ¿Cómo puedo resolver este error?

Aquí está mi clase WebApiConfig:

public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type. // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries. // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712. //config.EnableQuerySupport(); } }

Y los detalles del error:

El objeto aún no se ha inicializado. Asegúrese de llamar a HttpConfiguration.EnsureInitialized () en el código de inicio de la aplicación después de todos los demás códigos de inicialización.

Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

Detalles de la excepción: System.InvalidOperationException: el objeto aún no se ha inicializado. Asegúrese de llamar a HttpConfiguration.EnsureInitialized () en el código de inicio de la aplicación después de todos los demás códigos de inicialización.

Error de fuente:

Se generó una excepción no controlada durante la ejecución de la solicitud web actual. La información sobre el origen y la ubicación de la excepción se puede identificar utilizando el seguimiento de pila de excepción a continuación.

Stack Trace:

[InvalidOperationException: The object has not yet been initialized. Ensure that HttpConfiguration.EnsureInitialized() is called in the application''s startup code after all other initialization code.] System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes() +127 System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request) +99 System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext) +191 System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase httpContext) +233 System.Web.Routing.UrlRoutingModule.PostResolveRequestCache(HttpContextBase context) +60 System.Web.Routing.UrlRoutingModule.OnApplicationPostResolveRequestCache(Object sender, EventArgs e) +82 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69


En Global.asax, el evento Application_Start necesita cambiar de

WebApiConfig.Register(GlobalConfiguration.Configuration);

a:

GlobalConfiguration.Configure(WebApiConfig.Register);