ASP.NET MVC是否包含代码中的任何路由约束?如果是这样,我如何定义日期时间约束?
例如。网址:
http://mydomain.com/{versionDate}/{controller}/{action}
http://mydomain.com/2010-01-20/search/posts
欢呼:)
答案 0 :(得分:10)
我最终制定了自己的路线约束。只花了几分钟。
using System;
using System.Web;
using System.Web.Routing;
namespace Whatever.Your.Funky.Cold.Medina.Namespace.Is
{
public class DateTimeRouteConstraint : IRouteConstraint
{
#region IRouteConstraint Members
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values,
RouteDirection routeDirection)
{
DateTime dateTime;
return DateTime.TryParse(values[parameterName] as string, out dateTime);
}
#endregion
}
}
简单:P
答案 1 :(得分:2)
你也可以在路线上设置约束,就像这样。使用的正则表达式不是很健壮,所以你应该对它进行优化。
routes.MapRoute(
"Version", "
{versionDate}/{controller}/{action}",
new {controller="Search", action="Posts"},
new {versionDate= @"\d\d\d\d-\d\d-\d\d" }
);
来自here的信息。
答案 2 :(得分:0)
所有的框架都是可以覆盖的,所以可能会有很大的痛苦,超越路由引擎的默认行为,但我同意@jrista,因为你可能想让它成为控制器的参数否则mvc将期望在2010-01-20文件夹中找到/搜索/发布帖子