ASP.NET Web Api Routing (IIS против собственного размещения) - PullRequest
12 голосов
/ 23 февраля 2012

Я обнаружил небольшую разницу в базовых классах маршрутизации в ASP.NET Web Api, которая вынудила меня написать небольшой вспомогательный класс, который позволит мне определять свои маршруты только один раз. Для этого есть причина? Я предполагаю, что это было слишком большое изменение в платформе, чтобы оба RouteCollection были производными от одного базового класса или реализовали один и тот же интерфейс (что сделало бы этот класс намного проще)

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

Это позволяет мне вызывать простой метод AddHttpRoutes как в моем Global.asax, так и в моих интеграционных тестах.

Интеграционные тесты

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

Является ли это известной проблемой, и может ли она быть исправлена ​​в более позднем выпуске ASP.NET Web Api?

1 Ответ

4 голосов
/ 24 февраля 2012

Да, маршрутизация немного отличается из-за того, что ASP.NET уже имеет маршрутизацию, но мы не можем зависеть от нее напрямую, так как это помешает поддержке Self-host.Мы все еще смотрим на то, как вещи могут иметь больше смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...