从ASP.NET MVC应用程序访问Web API路由

时间:2014-12-06 11:59:44

标签: asp.net asp.net-mvc asp.net-web-api

我有一个包含2个项目的解决方案。一个是ASP.NET Web API项目,另一个是ASP.NET MVC项目。 web api将从各种客户端消费。如果这2个项目是一个,我可以为我的api生成一个链接:

@Url.RouteUrl("ActionApi", new { httpRoute = string.Empty, controller = "User", action = "AddChildAsync" });  

但是现在这两个项目是分开的,我不能这样做,因为mvc应用程序找不到web api的配置(虽然我有一个从mvc应用程序到web api的项目引用)。那么有没有优雅的方式来访问web api配置并动态生成链接?提前谢谢。

2 个答案:

答案 0 :(得分:2)

您应该可以通过更改httproute = true来访问它。

@Url.RouteUrl("ActionApi", new { httpRoute = true, controller = "User", action = "AddChildAsync" });

或者你可以这样做来指定webapi路线。

@Url.HttpRouteUrl("ActionApi", new { controller = "User", action = "AddChildAsync" });  

但您确实需要在Global.asax中完成WebApi注册并安装NuGet WebApi包。

此外,正如您在链接中引用的那样,路线中通常不会包含操作。它们通常是未命名的并且由请求提供(GET,POST PUT等)。除非您的路由配置看起来像这样,否则这些都被省略。

routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional } );

答案 1 :(得分:1)

我有一次类似的问题。

我的解决方案是为每个可以在您的项目(MVC和WebApi)之间共享的WebApi控制器创建接口。对每个WebApi控制器添加一个动作(我将其称为“路由”动作),它返回序列化的键值元素集合,其中键是接口(WebApi)方法名称,值是包含路由和http的对象方法(获取,发布等)(它在WebApi项目中构建,因此您可以访问它的路由表)。在MVC应用程序启动时,您可以向WebApi路由操作发出请求并获取其所有路由。然后,您可以将其存储在全局只读字典中以便快速访问。获取特定路径变得非常简单,因为您的接口方法名称是您之前填充的字典的键。