ASP.NET MVC 是否包含任何嵌入到代码中的路由约束?如果是这样,我如何定义日期时间约束?
例如。网址:
http://mydomain.com/{versionDate}/{controller}/{action}
http://mydomain.com/2010-01-20/search/posts
干杯:)
ASP.NET MVC 是否包含任何嵌入到代码中的路由约束?如果是这样,我如何定义日期时间约束?
例如。网址:
http://mydomain.com/{versionDate}/{controller}/{action}
http://mydomain.com/2010-01-20/search/posts
干杯:)
我最终制定了自己的路线限制。只花了几分钟。
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
您还可以在路线上设置约束,类似这样。使用的正则表达式不是很健壮,因此您应该对其进行改进。
routes.MapRoute(
"Version", "
{versionDate}/{controller}/{action}",
new {controller="Search", action="Posts"},
new {versionDate= @"\d\d\d\d-\d\d-\d\d" }
);
来自这里的信息。
所有的框架都是可以覆盖的,因此可以很痛苦地覆盖路由引擎的默认行为,但我同意@jrista,因为您可能希望将其作为控制器的参数,否则 mvc 将期望在 2010-01-20 文件夹中找到 /search/posts