13 października 2011, 00:50 dario Komentarze (0)

MultiConstraint w ASP.NET MVC

Definiując ścieżki w aplikacji ASP.NET MVC możemy zadać warunki (constraint) określające poprawność reguły dla parametru. Ja na przykład stosuję (między innymi) domyślnie constraint, który przepuszcza ścieżki pisane tylko małymi literami. Dzięki temu ustrzegam się przed zdublowanymi stronami indeksowanymi przez wyszukiwarki (wielkość liter ma znaczenie).

Niestety dla jednego parametru można zadać tylko jeden warunek naraz. A co jeśli chcemy dołożyć kolejny? Można sobie pomóc korzystając z jednego, który przyjmuje kolejne. Tak oto mamy MultiConstraint.

public class MultiConstraint : IRouteConstraint
{
    private readonly IRouteConstraint[] _contraints;

    public MultiConstraint(params IRouteConstraint[] contraints)
    {
        _contraints = contraints;
    }

    public bool Match(
        HttpContextBase httpContext,
        Route route,
        string parameterName,
        RouteValueDictionary values,
        RouteDirection routeDirection)
    {
        return _contraints.All(x => x.Match(
            httpContext,
            route,
            parameterName,
            values,
            routeDirection));
    }
}
Zasada działania jest prosta. W konstruktorze podajemy dowolną ilość constraintów. Jeśli wszystkie będą spełnione to całość także.

Prosty przykład wywołania dla parametru controller:

controller = new MultiConstraint(new LowercaseConstraint(), new SubdomainConstraint(portalDomain))
Taka mała rzecz, a cieszy, bo bardzo mi brakowało takiej możliwości.

Tagi:

Asp.net-mvc

Pingbacks and trackbacks (1)+

Komentarze zablokowane

O autorze

Dariusz Gil - projektant i programista aplikacji internetowych budowanych na platformie Microsoft w technologii ASP.NET (C#) oraz MS SQL Server. Obecnie właściciel (narazie :)) jednoosobowej firmy Softio.

Filtruj używając APML