C# 如何最好地链接到API控制器
要链接到C# 如何最好地链接到API控制器,c#,razor,asp.net-web-api,resharper,C#,Razor,Asp.net Web Api,Resharper,要链接到控制器/A/,请执行以下操作: @Html.ActionLink(anId, "Action", "Controller", new {id = anId}) 操作由Resharper加下划线,我可以使用F12导航到它 但我有一个指向api控制器的链接: @Html.ActionLink("API Version", "../api/controller/", new {id = anId}) 这没有resharper导航选项,如果重命名控制器,也不会重构。有没有更干净的方法从raz
控制器/A/
,请执行以下操作:
@Html.ActionLink(anId, "Action", "Controller", new {id = anId})
操作由Resharper加下划线,我可以使用F12导航到它
但我有一个指向api控制器的链接:
@Html.ActionLink("API Version", "../api/controller/", new {id = anId})
这没有resharper导航选项,如果重命名控制器,也不会重构。有没有更干净的方法从razor视图链接到ApicController?尤其是一个Resharper能识别。我不知道Resharper的情况,但你可以这样做:
@Html.ActionLink(
"API Version",
"Action",
"Controller",
new { id = anId, httproute = "" },
null
)
如果您传递
httproute=“
,助手将使用其路由定义生成指向API控制器的url。您实际上必须更新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"});
正如其他答案所建议的那样,您可以像这样使用
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>
此方法提供了一个与用于常规控制器/操作链接的@Html.ActionLink
非常相似的接口
所有这些解决方案都允许点击使用ReSharper。我不得不使用一个替代重载(请查看编辑),但我得到的链接是
http://localhost:64404/Controller/Action/anId
没有提到api
。当我像你说的那样使用它时,我得到链接http://localhost:64404/source/Action?Length=10
到目前为止最接近的:`@Html.ActionLink(“API版本”,null,新的{id=Model.id.Name,httproute=”“})`产生:http://localhost:64404/api/controller/anId?action=detail
查看我的更新答案。我错误地使用了您问题中显示的错误重载。我喜欢此解决方案,因为它消除了对显式httproute=“”参数的需要。@Html.RouteLink()不提供正确的url。我已经在MVC 5中检查过了,答案很好。注意RouteParameter(非RouterParameter)的打字错误。
@Html.RouteLink("My Link Text", "DefaultApi", new { controller = "MyApiController" })