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

wes*_*ton 10 c# resharper razor asp.net-web-api

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

@Html.ActionLink(anId, "Action", "Controller", new {id = anId})
Run Code Online (Sandbox Code Playgroud)

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

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

@Html.ActionLink("API Version", "../api/controller/", new {id = anId})
Run Code Online (Sandbox Code Playgroud)

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

Jes*_*ebb 8

正如其他答案已经提出的Url.RouteUrl那样,您可以使用如下:

@Url.RouteUrl("DefaultApi", new {httproute= "", controller = "MyApiController"});
Run Code Online (Sandbox Code Playgroud)

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

@Url.HttpRouteUrl("DefaultApi", new { controller = "MyApiController" })
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

@Html.RouteLink("My Link Text", "DefaultApi", new { controller = "MyApiController" })
Run Code Online (Sandbox Code Playgroud)

此方法提供了一个非常类似的接口,@Html.ActionLink用于常规的Controller/Action链接.

所有这些解决方案都允许点击以与ReSharper一起使用.


SOf*_*tic 5

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

所以添加这条路线:

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

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

@Url.RouteUrl("ActionRoute", new {httproute= "", controller = "controller", action = "action"});
Run Code Online (Sandbox Code Playgroud)

编辑

我重新阅读了你的问题并且它没有说出一个动作,所以我只是假设,无论哪种方式,你仍然可以使用@Url.RouterUrl:

@Url.RouteUrl("DefaultApi", new {httproute= "", controller = "controller"});
Run Code Online (Sandbox Code Playgroud)