我正在尝试将一些查询字符串变量映射到一个数组中,该数组是一个操作方法的参数之一。
行动方法如下:
public ActionResult Index(string url, string[] generics)
{
//controller logic here
}
我们可以通过使用诸如?generics = test1& generics = test2之类的查询字符串轻松地将MVC绑定到变量泛型,但是我们希望按如下方式设置路由:
/不管/ TEST1 / TEST2
以下路线配置有效:
routes.MapRoute(
"TestRoute",
"whatever/{generics[0]}/{generics[1]}",
new { controller = "Main", action = "Index" }}
);
我们的问题是我们想对值泛型[0]和泛型[1]应用一些约束,因此它们的日期格式为12-12-2009。
我们已经尝试了以下内容,但约束根本不允许任何内容:
routes.MapRoute(
"TestRoute",
"whatever/{generics[0]}/{generics[1]}",
new { controller = "Main", action = "Index" }},
new { generics = @"[0-9]{2}\-[0-9]{2}\-[0-9]{2,4}" }
);
我们尝试过以下操作,但这会引发运行时错误:
routes.MapRoute(
"TestRoute",
"whatever/{generics[0]}/{generics[1]}",
new { controller = "Main", action = "Index" }},
new { generics = new string[2]{ @"[0-9]{2}\-[0-9]{2}\-[0-9]{2,4}",@"[0-9]{2}\-[0-9]{2}\-[0-9]{2,4}"}}
);
如果能够做到这一点,请有人这么好,让我们知道,如果可以,怎么做?
谢谢!
专利
答案 0 :(得分:2)
总有最后的手段 - IRouteConstraint =>
public class GenericsConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route,
string parameterName, RouteValueDictionary values,
RouteDirection routeDirection)
{
//not sure if that will cast
var generics = values["generics"] as string[];
var rgx = new Regex("tralala");
// not not... hahahaha
return !generics.Any(x=>!rgx.Match(x));
}
}
然后只使用该约束来映射您的路线=>
var route = new Route("whatever/{generics[0]}/{generics[1]}",
new MvcRouteHandler())
{Constraints = new RouteValueDictionary(new GenericsConstraint())};
routes.add("UberRoute", route);