2

通常,我们的 global.asax 文件中有以下示例代码。所以,我的问题是我们如何拥有多个 MapRoute 以及如何使用它们???

我想要这样的网址:

http://domain/Home.aspx/Index/Cricket-Ball/12

        公共静态无效注册路由(RouteCollection 路由)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            路线.MapRoute(
                “默认”,
                "{controller}/{action}/{id}",
                新的{控制器=“家”,动作=“索引”,id=UrlParameter.Optional}
            );
        }

我想要这样的东西,但我不明白如何使用这个路由,以便我可以获得 SEO 友好的 URL:

        公共静态无效注册路由(RouteCollection 路由)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            路线.MapRoute(
                "默认1",
                "{controller}/{action}/{productname}/{id}",
                新的{控制器=“主页”,操作=“索引”,产品名称= UrlParameter.Optional,id = UrlParameter.Optional}
            );

            路线.MapRoute(
                “默认”,
                "{controller}/{action}/{id}",
                新的{控制器=“家”,动作=“索引”,id=UrlParameter.Optional}
            );
        }

提前致谢。

4

2 回答 2

3

由于这不是通用 url,而是具体的(指向产品),您可以使用:

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

        routes.MapRoute(
            "Products",
            "home/index/{productname}/{id}",
            new { controller = "Home", action = "Index" }
        );

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

因此,与“产品”路线不匹配的所有内容都将转到“默认”。请注意,我没有将“.aspx”添加到溃败中,因为我认为这是一个错误。如果你真的想要它,只需将它添加到路由中:

routes.MapRoute(
            "Products",
            "home/index.aspx/{productname}/{id}",
            new { controller = "Home", action = "Index" }
        );

另外,我建议使用更好的网址:

routes.MapRoute(
            "Products",
            "products/{productname}/{id}",
            new { controller = "Home", action = "Index" }
        );
于 2012-10-03T06:18:52.047 回答
1

您使用的路由示例适用于 ASP.NET MVC,而不是 WebForms。您需要使用此博客文章中描述的不同变体:

http://weblogs.asp.net/scottgu/archive/2009/10/13/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series。 aspx

例子:

routes.MapPageRoute(
    "route-name",
    "products/{id}",
    "~/Products.aspx");

然后在您的 Page_Load 中,您需要像这样提取 id 的路由值:

int id = Page.RouteData.Values["id"] as int;
于 2012-10-03T06:03:01.487 回答