ASP.NET MVC路由所有请求

时间:2009-10-29 12:25:20

标签: asp.net asp.net-mvc

我们需要呈现相同的网站,具有不同的主题(和不同的数据),具体取决于网站的“路线”。

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

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

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

那么我的选择是什么?

创建自定义视图引擎,该引擎使用查询字符串(mvc route param)值来加载相关的母版页。

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

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

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

这也是global.asax中定义的任何必须接受参数的路由的问题。

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

2 个答案:

答案 0 :(得分:3)

首先定义路由:

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

然后在控制器中使用它:

RouteData.Values["siteType"]

答案 1 :(得分: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
}
相关问题