Reittien parametrejä voi rajoittaa Reititys. Monimutkaisempia rajoituksia voi tehdä luomalla luokan tätä tarkoitusta varten. Tällöin luokan tulee toteuttaa liittymä System.Web.Routing.IRouteConstraint.
Esimerkiksi voisi tarkistaa muodostavatko vuosi, kuukausi ja päivä kelvollisen päivämäärän (huomioiden eri määrän päiviä eri kuukausissa).
using System;
using System.Web;
using System.Web.Routing;
namespace Esimerkki
{
public class DateRouteConstraint : IRouteConstraint
{
// vuosi-parametrin nimi reitissä
private readonly string _yearParam;
// kuukausi-parametrin nimi reitissä
private readonly string _monthParam;
// päivä-parametrin nimi reitissä
private readonly string _dayParam;
/// <summary>
///
/// </summary>
/// <param name="yearParam">Name of the year parameter</param>
/// <param name="monthParam">Name of the month parameter</param>
/// <param name="dayParam">Name of the day parameter</param>
public DateRouteConstraint(string yearParam = "year", string monthParam = "month", string dayParam = "day")
{
this._yearParam = yearParam;
this._monthParam = monthParam;
this._dayParam = dayParam;
}
// Tämä metodi testaa onko reitti kelvollinen
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
int year = Convert.ToInt32(values[_yearParam]);
int month = Convert.ToInt32(values[_monthParam]);
int day = Convert.ToInt32(values[_dayParam]);
if (month >= 1 && month <= 12)
{
return day >= 1 && day <= DateTime.DaysInMonth(year, month);
}
return false;
}
}
}
Tuota rajoitetta voisi käyttää seuraavasti
routes.MapRoute("arkisto",
"arkisto/{vuosi}/{kuukausi}/{paiva}",
new { controller = "Arkisto", action = "Nayta" },
new { paivays = new DateRouteConstraint("vuosi", "kuukausi", "paiva") });