要链接到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认可。
答案 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控制器生成一个网址。