我有一个包含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配置并动态生成链接?提前谢谢。
答案 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路由操作发出请求并获取其所有路由。然后,您可以将其存储在全局只读字典中以便快速访问。获取特定路径变得非常简单,因为您的接口方法名称是您之前填充的字典的键。