Разница между "MapHttpRoute" и "MapRoute"?

Зачем использовать "MapRoute" для маршрутизации по умолчанию, используя "MapHttpRoute" для маршрутизации "DefaultApi"?

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}"
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

Ответ 1

Если вы используете веб-API поверх ASP.NET, они в конечном итоге будут работать с одной и той же базовой таблицей маршрутов ASP.NET, однако, как правильно указано, с точки зрения пользователя вы вызываете два разных метода регистрации маршрута.

Маршрутизация была разработана таким образом, чтобы при размещении за пределами ASP.NET веб-API не пришлось бы полагаться на System.Web.

Помните, что веб-API не сидит поверх MVC, веб-форм или вообще ASP.NET. Он может размещаться в веб-контексте (ASP.NET), но также может быть размещен самостоятельно (Console, WPF и т.д.) Или даже размещен в памяти (без использования порта, что полезно для легкого сквозного тестирования).

Ответ 2

MapRoute предназначен для "нормальных" ASP.NET MVC-контроллеров, тогда как MapHttpRoute предназначен для контроллеров Web API.