DetaTokens属性:
该属性是附加自定义值的集合,这些自定义的值将被传递到路由处理程序,但不参与路由拼配过程,在动作内部,只能通过控制器的RouteData属性访问在DataTokens中包含的值
示例:
如果有一个新站点:并且通过url设置需要访问数据库
解决方案一:
路由定义: Route bolg = new Route(
"blog/{database}/{year}/{month}/{day}",
new MvcRouteHandler()
);
blog.Defaults = new RouteValueDictionary(
new
{
controller = "Home",
action = "index"
}
);
bolg.Constraints = new RouteValueDictionary(
new
{
database = "database1 |database2",
year = @"\d{2}|\d{4}",
month = @"\d{1,2}",
day = @"\d{1,2}"
}
);
routes.Add(blog);
Action定义:
public ActionResult Index(string database ,string year,string month ,string day)
{
string constr = string.Empty;
switch (constr)
{
case "database1":
constr = "database1_constr";
break ;
case "database2":
constr = "database2_constr";
break ;
}
ViewData["Database_Msg"] = string.Format("connecting to database {0}", constr);
return View();
}
解决方案二:
示例:
路由: Route sport= new Route(
"blog/sport/{year}/{month}/{day}",
new MvcRouteHandler()
);
sport.Defaults = new RouteValueDictionary(
new
{
controller = "Home",
action = "index"
}
);
sport.Constraints = new RouteValueDictionary(
new
{
year = @"\d{2}|\d{4}",
month = @"\d{1,2}",
day = @"\d{1,2}"
}
);
sport.DataTokens = new RouteValueDictionary(
new { database = "sport" });
routes.Add(sport);
Route arch= new Route(
"blog/arch/{year}/{month}/{day}",
new MvcRouteHandler()
);
arch.Defaults = new RouteValueDictionary(
new
{
controller = "Home",
action = "index"
}
);
arch.Constraints = new RouteValueDictionary(
new
{
year = @"\d{2}|\d{4}",
month = @"\d{1,2}",
day = @"\d{1,2}"
}
);
arch.DataTokens = new RouteValueDictionary(
new { database = "arch" });
routes.Add(arch);
DataTokens 动作中使用:
public ActionResult Index(string year,string month ,string day)
{
ViewData["Database_Msg"] = string.Format("connecting to database {0}", RouteData.DataTokens["database"]);
return View();
}
RouteHandler属性:
处理请求的类的一个实例,处理请求类总是MvcRouteHandler,如果不希望默认方式,可以通过实习IRouteHandler接口及其唯一的方法GetHttpHandler,这样会导致无法继承Mvc。