Есть ли в ASP.NET MVC какие-либо ограничения на маршрут DateTime? - PullRequest
5 голосов
/ 02 марта 2010

содержит ли ASP.NET MVC какие-либо ограничения маршрута, встроенные в код? если да, то как мне определить ограничение по времени и дате?

например. URL:

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

ура :) 1006 *

Ответы [ 3 ]

10 голосов
/ 02 марта 2010

Я закончил тем, что сделал свое собственное ограничение маршрута. заняло всего несколько минут.

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

2 голосов
/ 02 марта 2010

Вы также можете установить ограничение на маршрут, что-то вроде этого. Используемое регулярное выражение не очень надежно, поэтому его следует уточнить.

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

Информация от здесь .

0 голосов
/ 02 марта 2010

все фреймворки могут переопределять, поэтому возможно, с большой болью, переопределить поведение по умолчанию движка маршрутов, но я согласен с @jrista в том, что вы можете сделать его параметром контроллера иначе mvc будет ожидать найти / search / posts в папке 2010-01-20

...