如何在所有路由 MVC 5 中设置 {city}

How to set {city} in all the routes MVC 5

我正在开发一个市场应用程序,它应该有映射到不同城市的不同产品和供应商。 我的想法是我需要将 CurrentCity 存储在上下文中,以便我可以使用它来构建 urls、过滤数据、获取交付区域等。 例如

www.mywebsite.com/cityA/listings
www.mywebsite.com/cityB/listings

www.mywebsite.com/cityA/cart
www.mywebsite.com/cityB/cart

类似于 MoonPig 网站 (https://www.moonpig.com/uk/Gift/Flowers/)

目前,我在几乎所有控制器方法中都将城市作为参数传递,并将其存储在 cookie 中。

或者,我也在考虑创建一个 BaseController 并可能将其注入到 OnActionExecuting(ActionExecutingContext context) 中。

但是第一种方法的问题是所有 Action 方法都需要将 "city" 作为参数,而我需要在上下文中使用它来执行类似

的操作
@Url.Action("Index", "Listings", new {city = cityName})

如果我使用第二种方法,那么我认为我不会得到其中包含城市的 urls。

理想情况下,我正在寻找一种解决方案,我可以使用它在 MVC RouteDictionary 中注入城市参数作为基本路由/段,以便相应地生成所有 Urls(使用 @url 帮助器)。

这是可能的还是有更好的方法来解决这个问题? 如果有人能告诉我方向,我将不胜感激。

But the problem with the first approach is that all the Action methods need to have "city" as a parameter

这个假设是不正确的,因为MVC在生成URL时会自动从当前上下文传递值,所以不需要显式传递city只要在路由中配置即可并出现在 URL 中。请参阅 了解如何利用此行为进行本地化,这与您正在做的事情类似。