Sdílet prostřednictvím


Vytvoření vlastního omezení trasy (VB)

Stephen Walther

Stephen Walther ukazuje, jak můžete vytvořit vlastní omezení trasy. Implementujeme jednoduché vlastní omezení, které brání spárování trasy při požadavku prohlížeče ze vzdáleného počítače.

Cílem tohoto kurzu je ukázat, jak můžete vytvořit vlastní omezení trasy. Omezení vlastní trasy umožňuje zabránit spárování trasy, pokud není spárována nějaká vlastní podmínka.

V tomto kurzu vytvoříme omezení trasy Localhost. Omezení trasy localhost pouze odpovídá požadavkům z místního počítače. Vzdálené požadavky z internetu se neshodují.

Vlastní omezení trasy implementujete implementací rozhraní IRouteConstraint. Toto je velmi jednoduché rozhraní, které popisuje jednu metodu:

Function Match ( _
    httpContext As HttpContextBase, _
    route As Route, _
    parameterName As String, _
    values As RouteValueDictionary, _
    routeDirection As RouteDirection _
) As Boolean

Metoda vrátí logickou hodnotu. Pokud vrátíte hodnotu False, trasa přidružená k omezení nebude odpovídat požadavku prohlížeče.

Omezení Localhost je obsaženo ve výpisu 1.

Výpis 1 – LocalhostConstraint.vb

Public Class LocalhostConstraint
    Implements IRouteConstraint
    Public Function Match( _
                ByVal httpContext As HttpContextBase, _
                ByVal route As Route, _
                ByVal parameterName As String, _
                ByVal values As RouteValueDictionary, _
                ByVal routeDirection As RouteDirection _
            ) As Boolean Implements IRouteConstraint.Match
        Return httpContext.Request.IsLocal
    End Function
End Class

Omezení v výpisu 1 využívá výhod IsLocal vlastnost vystavené HttpRequest třídy. Tato vlastnost vrátí hodnotu true, pokud je IP adresa požadavku buď 127.0.0.1, nebo pokud je IP adresa požadavku stejná jako IP adresa serveru.

Použijete vlastní omezení v rámci trasy definované v souboru Global.asax. Soubor Global.asax ve výpisu 2 používá omezení Localhost, aby zabránilo komukoli požádat o stránku Správa, pokud nepožaduje z místního serveru. Například požadavek na /Správa/DeleteAll selže, pokud je proveden ze vzdáleného serveru.

Výpis 2 – Global.asax

Public Class MvcApplication
    Inherits System.Web.HttpApplication
    Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
        routes.MapRoute( _
            "Admin", _
            "Admin/{action}", _
            New With {.controller = "Admin"}, _
            New With {.isLocal = New LocalhostConstraint()} _
        )
        'routes.MapRoute( _
        '    "Default", _
        '    "{controller}/{action}/{id}", _
        '    New With {.controller = "Home", .action = "Index", .id = ""} _
        ')
    End Sub
    Sub Application_Start()
        RegisterRoutes(RouteTable.Routes)
    End Sub
End Class

Omezení Localhost se používá v definici trasy Správa. Tato trasa nebude spárována žádostí vzdáleného prohlížeče. Mějte však na paměti, že jiné trasy definované v souboru Global.asax můžou odpovídat stejnému požadavku. Je důležité si uvědomit, že omezení brání tomu, aby konkrétní trasa odpovídala požadavku, a ne všechny trasy definované v souboru Global.asax.

Všimněte si, že výchozí trasa byla okomentována ze souboru Global.asax ve výpisu 2. Pokud zahrnete výchozí trasu, bude výchozí trasa odpovídat požadavkům kontroleru Správa. V takovém případě můžou vzdálení uživatelé pořád vyvolat akce kontroleru Správa, i když jejich požadavky neodpovídají Správa trase.