MVC路由参数未被传递

时间:2016-03-18 12:53:48

标签: c# asp.net-mvc url-routing asp.net-mvc-routing

我正在尝试按照在线教程进行一些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 }
        );
    }

此网址有效:/news/index/?slug=test-news-title

但此网址不会:/news/index/test-news-title

===进一步编辑===

看来我的子域路线正在弄乱它。如果我删除子域路由它可以正常工作。

感谢。

3 个答案:

答案 0 :(得分:1)

最有可能的是,您的路线过于宽泛。但这取决于其他路由的配置方式。您需要发布整个路线配置(包括区域路线和属性路线),以便合理地得到您路线的错误答案。

但是,您可以更加具体地了解此路线,因为您知道它需要以/News开头。

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

此外,通过提供默认值使URL参数可选是没有意义的。如果您删除url = "",则网址中需要url参数。如果配置如上,如果您只是通过/News,则它不会匹配此路线。但是,正如您所拥有的那样,此URL将匹配。

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

答案 1 :(得分:0)

您错过了MapRoute

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

希望这个帮助

答案 2 :(得分:0)

您已为参数url设置空字符串。你应该使用UrlParameter.Optional(如果是强制性的话,可以删除它):

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