如何创buildASP.NET Web API Url?
在ASP.NET MVC中,我们有@Url.Action的动作。 是否有类似@Url.Api这将路由到/ api /控制器? 
ApiController有一个叫做Url的属性,它的types是System.Web.Http.Routing.UrlHelper ,它允许你为api控制器构buildurl。
例:
 public class ValuesController : ApiController { // GET /api/values public IEnumerable<string> Get() { // returns /api/values/123 string url = Url.Route("DefaultApi", new { controller = "values", id = "123" }); return new string[] { "value1", "value2" }; } // GET /api/values/5 public string Get(int id) { return "value"; } ... } 
UrlHelper既不存在于您的视图中,也不存在于标准控制器中。
更新:
而为了做一个ApiController以外的路由,你可以做到以下几点:
 public class HomeController : Controller { public ActionResult Index() { string url = Url.RouteUrl( "DefaultApi", new { httproute = "", controller = "values", id = "123" } ); return View(); } } 
或在视图内:
 <script type="text/javascript"> var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })'; $.ajax({ url: url, type: 'GET', success: function(result) { // ... } }); </script> 
 请注意, httproute = ""路由令牌很重要。 
 显然,这假定你的Api路由在Global.asax的RegisterRoutes方法中被称为DefaultApi : 
 routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); 
 它使用Url.Action的更简单的forms,因此你不必引用任何路由名称: 
 Url.Action("ActionName", "ControllerName", new { httproute = "DefaultApi" }) 
 如果在某个区域内需要该URL,则可能需要添加一个area = "" 。  (Api控制器在默认情况下是在区域之外)。我正在使用MVC 4。 
希望能够以types安全的方式生成链接,而不使用硬编码string(控制器名称)?
这里有一个nuget! (这是马克·西曼写的)
https://github.com/ploeh/Hyprlinkr
像这样工作:
路线,像往常一样:
 name: "API Default", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } 
获取url:
 var linker = new RouteLinker(request); var uri = linker.GetUri<FooController>(r => r.GetById(1337)); 
结果:
 http://localhost/api/foo/1337 
这是用于回答这个问题的KISS方法:
如果这是您将用于创buildMVC控制器URL的代码
 @Url.Action("Edit", "MyController") 
为了获得控制器的API版本的URL(假设您使用相同的控制器名称),您可以使用
 @Url.Action("Edit", "api/MyController") 
所有的Url.Action方法正在做的是追加应用程序的根path,控制器名称,后跟动作名称(除非它是“索引”,在这种情况下,它不会被追加。如果path值对象有一个ID属性值也被附加到URL。