Как лучше всего связаться с контроллером 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, используя его определения маршрутизации.