He encontrado una pequeña diferencia en las clases base de enrutamiento en ASP.NET Web Api que me ha obligado a escribir una pequeña clase de ayuda que me permitirá definir mis rutas sólo una vez. ¿Hay alguna razón para esto? Estoy asumiendo que era demasiado grande un cambio en el marco de hacer ambas RouteCollection
s derivan de la misma clase base o implementar la misma interfaz (lo que habría hecho esta clase mucho más simple)Enrutamiento Api Web ASP.NET (IIS vs Self Hosted)
public static class RouteMapper
{
private class Route
{
public string Name { get; set; }
public string Template { get; set; }
public object Defaults { get; set; }
public Route(string name, string template, object defaults)
{
Name = name;
Template = template;
Defaults = defaults;
}
}
private static List<Route> GetRoutes()
{
return new List<Route>
{
new Route(
"API Default",
"api/{controller}/{id}",
new {id = RouteParameter.Optional})
};
}
public static void AddHttpRoutes(this HttpRouteCollection routeCollection)
{
var routes = GetRoutes();
routes.ForEach(route => routeCollection.MapHttpRoute(route.Name, route.Template, route.Defaults));
}
public static void AddHttpRoutes(this RouteCollection routeCollection)
{
var routes = GetRoutes();
routes.ForEach(route => routeCollection.MapHttpRoute(route.Name, route.Template, route.Defaults));
}
}
Lo que esto me permite hacer es llamar a un método simple AddHttpRoutes
tanto en mi Global.asax como en mis pruebas de integración.
Integración Pruebas de
var configuration = new HttpSelfHostConfiguration("http://localhost:20000");
configuration.Routes.AddHttpRoutes();
_server = new HttpSelfHostServer(configuration);
_server.OpenAsync().Wait();
Global.asax
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.AddHttpRoutes();
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Es este un problema conocido y que es probable que se fije en una versión posterior de Api Web ASP.NET?
Gran código de ejemplo, lo modifiqué ligeramente para mantener todo el código de enrutamiento dentro del archivo RouteConfig.cs original. – angularsen