Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何最好地链接到API控制器_C#_Razor_Asp.net Web Api_Resharper - Fatal编程技术网

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" })