如何最好地链接到API控制器

时间:2013-08-15 09:07:08

标签: c# razor asp.net-web-api resharper

要链接到Controller/A/<anId>我这样做:

@Html.ActionLink(anId, "Action", "Controller", new {id = anId})

Resharper强调了行动,我可以使用F12导航到它。

但我有一个api控制器的链接:

@Html.ActionLink("API Version", "../api/controller/", new {id = anId})

这没有resharper导航选项,如果重命名控制器,则不会重构。是否有更简洁的方法从剃刀视图链接到APIController?特别是一个Resharper认可。

3 个答案:

答案 0 :(得分:8)

正如其他答案已经建议的那样,您可以像Url.RouteUrl那样使用:

@Url.RouteUrl("DefaultApi", new {httproute= "", controller = "MyApiController"});

您也可以使用快捷方式Url.HttpRouteUrl,如下所示:

@Url.HttpRouteUrl("DefaultApi", new { controller = "MyApiController" })

"DefaultApi"是创建新WebApi项目时的默认路由名称。此字符串应与您在WebApiConfig.cs文件中为HttpRoute提供的任何名称相匹配。

这两种解决方案都只能帮助您生成路径的URL,它们实际上不会为您生成HTML链接。你需要像这样使用它们:

<a href="@Url.HttpRouteUrl("DefaultApi", new { controller = "MyApiController" })">My Link Text</a>

如果您希望Razor为您生成HTML锚标记,则可以改为使用此方法:

@Html.RouteLink("My Link Text", "DefaultApi", new { controller = "MyApiController" })

此方法提供了与@Html.ActionLink非常相似的接口,用于常规的控制器/动作链接。

所有这些解决方案都允许点击操作与ReSharper一起使用。

答案 1 :(得分:5)

您实际上必须更新api路由,因为默认情况下api不包含操作。

所以添加这条路线:

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

然后您可以创建如下链接:

@Url.RouteUrl("ActionRoute", new {httproute= "", controller = "controller", action = "action"});

<强> 修改

我重新阅读了您的问题并且没有说明任何行动,所以我只是假设,无论哪种方式,您仍然可以使用@Url.RouterUrl

@Url.RouteUrl("DefaultApi", new {httproute= "", controller = "controller"});

答案 2 :(得分:3)

我不知道Resharper,但你可以这样做:

@Html.ActionLink(
    "API Version", 
    "Action", 
    "Controller", 
    new { id = anId, httproute = "" },
    null
)

如果您通过httproute = "",帮助程序将使用其路由定义为您的API控制器生成一个网址。