Как лучше всего связаться с контроллером API

Чтобы перейти на Controller/A/<anId>, я делаю это:

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

Действие подчеркивается Resharper, и я могу перейти к нему с помощью F12.

Но у меня есть ссылка на контроллер api:

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

Это не имеет опции переадресации и не будет реорганизоваться, если я переименую контроллер. Существует ли более чистый способ привязки к APIController с точки зрения бритвы? В частности, распознает один рестартер.

Ответ 1

Вам действительно нужно обновлять маршруты 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

Как уже указывали другие ответы, вы можете использовать Url.RouteUrl так:

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

Вы также можете использовать метод ярлыков Url.HttpRouteUrl так:

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

"DefaultApi" - это имя Маршрута по умолчанию при создании нового проекта WebApi. Эта строка должна соответствовать любому имени, которое вы дали 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.

Ответ 3

Я не знаю о Resharper, но вы можете сделать это:

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

Если вы передадите httproute = "", хелпер будет генерировать URL-адрес вашего контроллера API, используя его определения маршрутизации.