6

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

例如。网址:

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

干杯:)

4

3 回答 3

12

我最终制定了自己的路线限制。只花了几分钟。

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

于 2010-03-02T04:43:05.563 回答
2

您还可以在路线上设置约束,类似这样。使用的正则表达式不是很健壮,因此您应该对其进行改进。

routes.MapRoute( 
    "Version", "
    {versionDate}/{controller}/{action}", 
    new {controller="Search", action="Posts"}, 
    new {versionDate= @"\d\d\d\d-\d\d-\d\d" } 
    ); 

来自这里的信息。

于 2010-03-02T17:31:59.763 回答
0

所有的框架都是可以覆盖的,因此可以很痛苦地覆盖路由引擎的默认行为,但我同意@jrista,因为您可能希望将其作为控制器的参数,否则 mvc 将期望在 2010-01-20 文件夹中找到 /search/posts

于 2010-03-02T04:07:47.190 回答