Vytvoření vlastního omezení trasy (VB)
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.