Tworzenie niestandardowego ograniczenia trasy (VB)
Stephen Walther pokazuje, jak można utworzyć ograniczenie trasy niestandardowej. Implementujemy proste ograniczenie niestandardowe, które uniemożliwia dopasowanie trasy po wysłaniu żądania przeglądarki z komputera zdalnego.
Celem tego samouczka jest zademonstrowanie sposobu tworzenia niestandardowego ograniczenia trasy. Ograniczenie trasy niestandardowej umożliwia zapobieganie dopasowywaniu trasy, chyba że zostanie dopasowany jakiś warunek niestandardowy.
W tym samouczku utworzymy ograniczenie trasy localhost. Ograniczenie trasy localhost odpowiada tylko żądaniom wysyłanym z komputera lokalnego. Żądania zdalne z Internetu nie są dopasowywane.
Ograniczenie trasy niestandardowej jest implementowane przez zaimplementowanie interfejsu IRouteConstraint. Jest to niezwykle prosty interfejs, który opisuje jedną metodę:
Function Match ( _
httpContext As HttpContextBase, _
route As Route, _
parameterName As String, _
values As RouteValueDictionary, _
routeDirection As RouteDirection _
) As Boolean
Metoda zwraca wartość logiczną. Jeśli zwrócisz wartość False, trasa skojarzona z ograniczeniem nie będzie zgodna z żądaniem przeglądarki.
Ograniczenie Localhost znajduje się na liście 1.
Lista 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
Ograniczenie w liście 1 korzysta z właściwości IsLocal uwidocznionej przez klasę HttpRequest. Ta właściwość zwraca wartość true, gdy adres IP żądania to 127.0.0.1 lub gdy adres IP żądania jest taki sam jak adres IP serwera.
Niestandardowe ograniczenie jest używane w ramach trasy zdefiniowanej w pliku Global.asax. Plik Global.asax na liście 2 używa ograniczenia Localhost, aby uniemożliwić każdemu zażądanie strony Administracja, chyba że wysyłają żądanie z serwera lokalnego. Na przykład żądanie /Administracja/DeleteAll zakończy się niepowodzeniem po wysłaniu z serwera zdalnego.
Lista 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
Ograniczenie Localhost jest używane w definicji trasy Administracja. Ta trasa nie zostanie dopasowana przez zdalne żądanie przeglądarki. Należy jednak pamiętać, że inne trasy zdefiniowane w pliku Global.asax mogą być zgodne z tym samym żądaniem. Należy pamiętać, że ograniczenie uniemożliwia dopasowanie określonej trasy do żądania, a nie wszystkie trasy zdefiniowane w pliku Global.asax.
Zwróć uwagę, że trasa domyślna została oznaczona jako komentarz z pliku Global.asax na liście 2. Jeśli dołączysz trasę domyślną, trasa domyślna będzie zgodna z żądaniami kontrolera Administracja. W takim przypadku użytkownicy zdalni nadal mogą wywoływać akcje kontrolera Administracja, mimo że ich żądania nie pasują do trasy Administracja.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla