带有类别的.NET URL

时间:2014-02-17 10:08:38

标签: .net asp.net-mvc url routing seo

我在为自己的网站管理好看的网址时遇到了一些问题。

我有3个modelsTownRestaurantFood

TownController正在使用TownServiceIndex则显示所有城镇(其他方法为EditCreateDelete

类似于RestaurantController - 使用RestaurantServiceIndex显示所选Restaurants中的所有Town

FoodController - 使用FoodServiceIndex显示所选Foods

中的所有Restaurant

网址:

/Town - 显示所有towns

/Restaurant/Index/1 - 使用restaurants

显示Town中的所有ID = 1

/Food/Index/1 - 使用foods

显示Restaurant中的所有ID = 1

只有/Town是很好的网址,其余的都不好。第二个应该更像/Town/1,但由于RestaurantController显示restaurants中的所有Town,因此必须将其写为/Restaurant/Index/1.

有没有办法改变这种结构? 另请注意,客户端坚持不使用自定义路由/属性路由。

最终的最终搜索引擎优化结果为/Town/TownName/RestaurantID(甚至是restaurantName),但如果您可以帮我处理以前的请求,那就不那么重要了。

感谢。

1 个答案:

答案 0 :(得分:1)

您需要修改并向App_Start文件夹中的RouteConfig.cs添加一些自定义路由。您应该在RegisterRoutes方法中使用以下默认路由

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

这条路线意味着如果您没有为控制器传递任何内容,操作或ID将转至/ Home / Index /,如果您将控制器传递给它/ Town / Index。如果您注册以下路线在默认路线之前(它们会按顺序进行尝试,因此默认路线应始终为最后路线)

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

这将捕获任何包含'/ Town /'和整数的网址,同时仍然让'/ Town /'单独转到Town控制器。