Bagikan melalui


Membuat Batasan Rute Kustom (VB)

oleh Stephen Walther

Stephen Walther menunjukkan bagaimana Anda dapat membuat batasan rute kustom. Kami menerapkan batasan kustom sederhana yang mencegah rute dicocokkan ketika permintaan browser dibuat dari komputer jarak jauh.

Tujuan tutorial ini adalah untuk menunjukkan bagaimana Anda dapat membuat batasan rute kustom. Batasan rute kustom memungkinkan Anda mencegah rute dicocokkan kecuali beberapa kondisi kustom cocok.

Dalam tutorial ini, kami membuat batasan rute Localhost. Batasan rute Localhost hanya cocok dengan permintaan yang dibuat dari komputer lokal. Permintaan jarak jauh dari seluruh Internet tidak cocok.

Anda menerapkan batasan rute kustom dengan mengimplementasikan antarmuka IRouteConstraint. Ini adalah antarmuka yang sangat sederhana yang menjelaskan satu metode:

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

Metode mengembalikan nilai Boolean. Jika Anda mengembalikan False, rute yang terkait dengan batasan tidak akan cocok dengan permintaan browser.

Batasan Localhost terkandung dalam Daftar 1.

Daftar 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

Batasan dalam Daftar 1 memanfaatkan properti IsLocal yang diekspos oleh kelas HttpRequest. Properti ini mengembalikan true ketika alamat IP permintaan adalah 127.0.0.1 atau ketika IP permintaan sama dengan alamat IP server.

Anda menggunakan batasan kustom dalam rute yang ditentukan dalam file Global.asax. File Global.asax di Listing 2 menggunakan batasan Localhost untuk mencegah siapa pun meminta halaman Admin kecuali mereka membuat permintaan dari server lokal. Misalnya, permintaan untuk /Admin/DeleteAll akan gagal saat dibuat dari server jarak jauh.

Daftar 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

Batasan Localhost digunakan dalam definisi rute Admin. Rute ini tidak akan dicocokkan dengan permintaan browser jarak jauh. Namun, sadarilah bahwa rute lain yang ditentukan di Global.asax mungkin cocok dengan permintaan yang sama. Penting untuk dipahami bahwa batasan mencegah rute tertentu cocok dengan permintaan dan tidak semua rute yang ditentukan dalam file Global.asax.

Perhatikan bahwa rute Default telah dikomentari dari file Global.asax di Daftar 2. Jika Anda menyertakan rute Default, maka rute Default akan cocok dengan permintaan untuk pengontrol Admin. Dalam hal ini, pengguna jarak jauh masih dapat memanggil tindakan pengontrol Admin meskipun permintaan mereka tidak akan cocok dengan rute Admin.