ASP.NET多个路由和无效的数据路由值

时间:2011-12-20 14:16:50

标签: asp.net routes

我有多条路由引用不同的控制器,一些路由具有相同数量的参数。请看下面的示例

routes.MapRoute("AdInfo", "{controller}/{action}/{AdGUID}/{UserID}/{Category}",
    new
    {
        controller = "Home",
        action = "DetailAd",
        AdGUID = UrlParameter.Optional,
        UserID = UrlParameter.Optional,
        Category = UrlParameter.Optional
    });   

routes.MapRoute("PostAd", "{controller}/{action}/{MainCategory}/{SubCategory}/{SubCategoryGUID}",
    new
    {
        controller = "Classified",
        action = "Post",
        MainCategory = UrlParameter.Optional,
        SubCategory = UrlParameter.Optional,
        SubCategoryGUID = UrlParameter.Optional
    });

路由AdInfo和PostAd有三个参数,但它们都引用不同的控制器和动作。 asp.net mvc错误地解释,当我点击URL时,假设链接到Controller Classified - 具有路径数据值MainCategory,subcategory和subcategoryGUID的action post。不知何故,路线数据值是AdGUID,UserID和类别。

你知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

你几乎就在那里,基本上你正在创建一个捕获所有路由并指定默认路由,除了你有两个catchall路由设置。它应该至少是这样的:

routes.MapRoute("AdInfo", "Home/{action}/{AdGUID}/{UserID}/{Category}",
    new
    {
        controller = "Home",
        action = "DetailAd",
        AdGUID = UrlParameter.Optional,
        UserID = UrlParameter.Optional,
        Category = UrlParameter.Optional
    });   

routes.MapRoute("PostAd", "Classified/{action}/{MainCategory}/{SubCategory}/{SubCategoryGUID}",
    new
    {
        controller = "Classified",
        action = "Post",
        MainCategory = UrlParameter.Optional,
        SubCategory = UrlParameter.Optional,
        SubCategoryGUID = UrlParameter.Optional
    });

当然在某些情况下这不起作用。我能看到能够将这个路由用于多个控制器的唯一方法是在控制器之后添加一个后缀,如下所示:

routes.MapRoute("AdInfo", "{Controller}/{action}/SomeNameThatSeperatesThisRouteFromTheNext/{AdGUID}/{UserID}/{Category}",

或者如果在第二条路线上行动将始终相同,那么只需将其硬编码到路线中,现在您将拥有两条不同的路线(确保您的硬编码路线在另一条路线之前宣布)。 / p>