C# 获取Razor视图中ASP.NET WEB API中路由前缀的URL
我有一个Web API 2 API控制器C# 获取Razor视图中ASP.NET WEB API中路由前缀的URL,c#,asp.net,razor,asp.net-web-api,C#,Asp.net,Razor,Asp.net Web Api,我有一个Web API 2 API控制器 [RoutePrefix("things")] public class ThingsController : APIController { [Route("{thingId}", Name="Things.Get")] public Thing Get(string thingId) { //snip... } } 一切都很好。。。除了我想将该路由的URL传递到一些JS中,这样它就可以构造URL来请求内容 从剃刀的角度来看,
[RoutePrefix("things")]
public class ThingsController : APIController
{
[Route("{thingId}", Name="Things.Get")]
public Thing Get(string thingId)
{
//snip...
}
}
一切都很好。。。除了我想将该路由的URL传递到一些JS中,这样它就可以构造URL来请求内容
从剃刀的角度来看,我已经试过了
myJavascriptObject.thingUrl = '@Url.Action("Get", "Things", new {area=""})';
但我得到一个空白字符串
我尝试给控制器路由一个明确的名称,并使用
@Url.RouteUrl(“Things.Get”,new{areas=”“,thingId=“foo”}”)
b
但这也是一个空字符串
我是不是很傻?这样行吗
在更多尝试之后更新 在MVC控制器上(我需要知道API控制器路由) 这些都是空的 如果我删除
area=”“
条件,那么我会得到一条包含区域名称的路线,而该路线中没有区域名称
?!TL;DR-如果有什么奇怪的东西,就把它放在一个新鲜的环境中 在这个非常遥远的案例中留下答案会帮助其他人 正如有人向我指出的那样,这对他们有效,我创建了一个新的MVC&API项目,并查看了默认路由 我们的是这样的:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "home",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new [] { "Another.Project.Controllers" }
);
}
沃特
我将其替换为默认路由配置:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
其他的一切仍然有效,我可以得到我想要的路线
我们肯定没有在这个项目中使用另一个名称空间,我猜名称空间是在这个解决方案是另一个解决方案的一部分时引入的(它曾经是另一个解决方案的一部分),或者是通过对它进行重构而引入的
所以我对任何令人讨厌的bug都得出了一个自然的结论:“这是怎么回事?!”?!"
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}