"MapHttpRoute"和"MapRoute"之间的区别是什么?

71

为什么在“默认”路由中使用“MapRoute”,而在“DefaultApi”路由中使用“MapHttpRoute”?

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

7
一篇有趣的文章,提出了这个主题:One (More) ASP.NET。这篇博客文章表明WebAPI的管道设计与其他路由机制不同,因为它被设计成可以在IIS之外进行托管。 - vcsjones
2个回答

65
如果您在ASP.NET的Web API上使用,它们最终会同时操作相同的底层ASP.NET路由表——但是正如正确指出的那样,从用户角度来看,您需要调用两个不同的方法来注册路由。
路由设计成这样是为了在ASP.NET之外进行托管时,Web API不必依赖于System.Web。
请记住,Web API并不是建立在MVC、Web Forms或者ASP.NET之上的。它可以被托管在Web环境(ASP.NET)中,但也可以自我托管(Console、WPF等),甚至可以被托管在内存中(无需端口使用,非常适用于轻量级端到端测试)。

29

MapRoute 适用于“普通”的 ASP.NET MVC 控制器,而 MapHttpRoute 则适用于 Web API 控制器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接