ASP.NET MVC是否有任何DateTime路由约束?

时间:2010-03-02 03:52:13

标签: asp.net-mvc asp.net-mvc-routing route-constraint

ASP.NET MVC是否包含代码中的任何路由约束?如果是这样,我如何定义日期时间约束?

例如。网址:

http://mydomain.com/{versionDate}/{controller}/{action}
http://mydomain.com/2010-01-20/search/posts
欢呼:)

3 个答案:

答案 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文件夹中找到/搜索/发布帖子