我在为自己的网站管理好看的网址时遇到了一些问题。
我有3个models
:Town
,Restaurant
,Food
。
TownController
正在使用TownService
而Index
则显示所有城镇(其他方法为Edit
,Create
,Delete
)
类似于RestaurantController
- 使用RestaurantService
和Index
显示所选Restaurants
中的所有Town
FoodController
- 使用FoodService
和Index
显示所选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
),但如果您可以帮我处理以前的请求,那就不那么重要了。
感谢。
答案 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控制器。