【问题标题】:Get URL for Route Prefix in ASP.NET WEB API in Razor view在 Razor 视图中获取 ASP.NET WEB API 中路由前缀的 URL
【发布时间】:2015-03-13 10:23:59
【问题描述】:

我有一个 Web API 2 API 控制器

[RoutePrefix("things")]
public class ThingsController : APIController
{
  [Route("{thingId}", Name="Things.Get")]
  public Thing Get(string thingId)
  {
    //snip...
  }
}

一切都很好......除了我想将该路由的 URL 传递给一些 JS 以便它可以构造 URL 来请求 Things

所以在剃刀视图中我已经尝试过

myJavascriptObject.thingUrl = '@Url.Action("Get", "Things", new {area=""})';

但我得到一个空白字符串

我尝试给控制器路由一个明确的名称并使用

@Url.RouteUrl("Things.Get", new {areas="", thingId="foo"}")b

这也是一个空字符串。

我是不是很傻?这应该工作吗?


经过更多尝试后更新。

在 MVC 控制器上(我需要知道 API 控制器路由)

var something = Url.Action("Get", "Things", new {area = ""});
var somethingWithId = Url.Action("Get", "Things", new { area = "", siteId = "fakeId" });
var somethingElse = Url.RouteUrl(new {Action = "Get", Controller = "Things", Area = ""});
var somethingElseWithId = Url.RouteUrl(new { Action = "Get", Controller = "Things", Area = "", siteId = "fakeId" });

这些都是空的。

如果我删除 area="" 条件,那么我会得到一条路线,但其中包含区域名称,并且路线中没有区域名称。

?!

【问题讨论】:

    标签: c# asp.net razor asp.net-web-api


    【解决方案1】:

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

    其他一切仍然有效并且我可以得到我想要的路线。

    我们绝对没有在这个项目中使用其他命名空间,我猜测命名空间是在这个解决方案是另一个解决方案的一部分时引入的(它曾经是),或者是通过移动它的重构。

    所以我得出了任何真正令人讨厌的错误的自然结论:“这是怎么工作的?!”

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 2021-06-21
      相关资源
      最近更新 更多