未传递 MVC 路由参数

MVC Routing Parameter Not Being Passed

我正在按照在线教程尝试进行一些 MVC 路由,但由于某种原因路由无法正常工作。

我正在尝试http://www.website.com/news/news-title

下面是我想走的路线。

routes.MapRoute(
    "News",
    "{controller}/{url}",
    new { controller = "News", action = "Index", url = "" }
);

在我的 NewsController 中,我有以下 ActionResult。

public ActionResult Index(String url)
{
    return View();
}

然而,当单步执行代码时,url 没有被填充。

谢谢

==更新==

谢谢大家的回复。

我没有修改下面的路线

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.LowercaseUrls = true;

        routes.Add(new SubdomainRoute());

        routes.MapRoute(
            "News",
            "News/{action}/{slug}",
            new { controller = "News", action = "Index" }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }

这个URL有效:/news/index/?slug=test-news-title

但是这个URL不会:/news/index/test-news-title

=== 进一步编辑 ===

看来我的子域路由有问题。如果我删除子域路由,它工作正常。

谢谢。

您缺少 MapRoute

中的操作部分
routes.MapRoute(
    "News",
    "{controller}/{action}/{url}",
    new { controller = "News", action = "Index", url = "" }
);

希望对您有所帮助

很有可能,您的路线太宽泛了。但这取决于其余路由的配置方式。您需要 post 您的整个路由配置(包括区域路由和属性路由),以便合理地得到您的路由问题的答案。

但是,您可以更具体地说明这条路线,因为您知道它需要以 /News 开头。

routes.MapRoute(
    "News",
    "News/{url}",
    new { controller = "News", action = "Index" }
);

此外,通过提供默认值使 URL 参数可选可能没有意义。如果删除 url = "",URL 中需要 url 参数。如上配置,如果你只传/News,是不会匹配这条路由的。然而,正如你所拥有的,这个 URL 将匹配。

最后,确保这条路线的顺序正确。它应该放在 之前 你的默认路线(如果你还有它的话)。

您已经为参数 url 设置了空字符串。你应该改用 UrlParameter.Optional (如果是强制性的,则完全删除它):

routes.MapRoute(
    "News",
    "{controller}/{url}",
    new { controller = "News", action = "Index", url = UrlParameter.Optional }
);