10

To link to Controller/A/<anId> I do this:

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

Action is underlined by Resharper and I can navigate to it with F12.

But I have a link to an api controller:

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

This does not have a resharper navigation option and is not going to refactored if I rename the controller. Is there a cleaner way to link to an APIController from a razor view? Particularly one Resharper recognises.

4

3 回答 3

8

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

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

您也可以Url.HttpRouteUrl像这样使用快捷方式:

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

"DefaultApi"是新建 WebApi 项目时默认的 Route 名称。此字符串应与您在文件中为 HttpRoute 指定的任何名称匹配WebApiConfig.cs

这两种解决方案都只会帮助您生成路由的 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用于常规的 Controller/Action 链接。

所有这些解决方案都允许点击进入 ReSharper。

于 2013-11-25T17:25:22.370 回答
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"});
于 2013-08-15T12:30:12.563 回答
3

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

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

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

于 2013-08-15T09:29:57.373 回答