【问题标题】:ASP.NET MVC Route All RequestsASP.NET MVC 路由所有请求
【发布时间】:2009-10-29 12:25:20
【问题描述】:

我们需要展示同一个网站,根据进入网站的“路线”不同的主题(和不同的数据)。

  • www.example.com/Trade
  • www.example.com/Public

注意:这些不是用户可以选择的动态主题。某些客户将通过第三方链接访问,该链接始终会将他们指向其中一个网址。

还需要在从 UI 到数据库的查询中使用价值 trade/public(根据进入站点的路径拉回不同的数据)。

那么我有哪些选择?

创建使用查询字符串(mvc 路由参数)值加载相关母版页的自定义视图引擎。

在每个控制器操作中,获取参数(交易/公共等)并将其传递给数据库查询。

public ActionResult List(string siteType){
    products.ListFor(siteType);
}

这里的问题是必须更改每个控制器操作以传递查询字符串值。

这也带来了一个问题,在 global.asax 中定义的任何路由都必须接受参数。

我想知道是否还有其他方法,也许是自定义控制器基础和主机名的某种组合,例如trade.example.com、public.example.com?

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    首先定义路由:

    routes.MapRoute(
                "Default", // Route name
                "{siteType}", // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
    

    然后在控制器中使用它:

    RouteData.Values["siteType"]
    

    【讨论】:

    • 将它与自定义基本控制器结合使用来检索值就可以了!感谢您的帮助
    【解决方案2】:

    这个怎么样:

    创建一个所有控制器都继承自的基本控制器

    添加属性:public string SiteType { get;受保护的集合; }

    添加一个 OnActionExecuting 方法以在调用任何操作之前对其进行设置,例如

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
     //use filterContext to set SiteType somehow, e.g. you can look at the URL or the route data
    }
    

    【讨论】:

      猜你喜欢
      • 2016-07-09
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 2013-01-15
      • 2015-12-31
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多