Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Stephen Walther
Stephen Walther özel yol kısıtlamasını nasıl oluşturabileceğinizi gösterir. Uzak bir bilgisayardan bir tarayıcı isteği yapıldığında bir yolun eşleşmesini engelleyen basit bir özel kısıtlama uygularız.
Bu öğreticinin amacı, nasıl özel yol kısıtlaması oluşturabileceğinizi göstermektir. Özel yol kısıtlaması, bir özel koşul eşleşmediği sürece bir yolun eşleştirilmesini engellemenizi sağlar.
Bu öğreticide bir Localhost yol kısıtlaması oluşturacağız. Localhost yol kısıtlaması yalnızca yerel bilgisayardan yapılan isteklerle eşleşir. İnternet üzerinden gelen uzak istekler eşleşmiyor.
IRouteConstraint arabirimini uygulayarak özel bir yol kısıtlaması uygularsınız. Bu, tek bir yöntemi açıklayan son derece basit bir arabirimdir:
bool Match(
HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection
)
yöntemi bir Boole değeri döndürür. false değerini döndürürseniz, kısıtlamayla ilişkili yol tarayıcı isteğiyle eşleşmez.
Localhost kısıtlaması Liste 1'de yer alır.
Listeleme 1 - LocalhostConstraint.cs
using System.Web;
using System.Web.Routing;
namespace MvcApplication1.Constraints
{
public class LocalhostConstraint : IRouteConstraint
{
public bool Match
(
HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection
)
{
return httpContext.Request.IsLocal;
}
}
}
Listeleme 1'deki kısıtlama, HttpRequest sınıfı tarafından kullanıma sunulan IsLocal özelliğinden yararlanır. İsteğin IP adresi 127.0.0.1 olduğunda veya isteğin IP adresi sunucunun IP adresiyle aynı olduğunda bu özellik true değerini döndürür.
Global.asax dosyasında tanımlanan bir yol içinde özel kısıtlama kullanırsınız. Listeleme 2'deki Global.asax dosyası, yerel sunucudan istekte bulunmadıkça herkesin bir Yönetici sayfası istemesini önlemek için Localhost kısıtlamasını kullanır. Örneğin, uzak sunucudan yapıldığında /Yönetici/DeleteAll isteği başarısız olur.
Listeleme 2 - Global.asax
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using MvcApplication1.Constraints;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Admin",
"Admin/{action}",
new {controller="Admin"},
new {isLocal=new LocalhostConstraint()}
);
//routes.MapRoute(
// "Default", // Route name
// "{controller}/{action}/{id}", // URL with parameters
// new { controller = "Home", action = "Index", id = "" } // Parameter defaults
//);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
Localhost kısıtlaması, Yönetici yolunun tanımında kullanılır. Bu yol bir uzak tarayıcı isteği tarafından eşleştirilmeyecek. Ancak Global.asax içinde tanımlanan diğer yolların aynı istekle eşleşebileceğini fark edin. Kısıtlamanın, global.asax dosyasında tanımlanan tüm yolların değil belirli bir yolun istekle eşleşmesini önlediğini anlamak önemlidir.
Liste 2'deki Global.asax dosyasından Varsayılan yolun açıklama satırı olduğuna dikkat edin. Varsayılan yolu eklerseniz, Varsayılan yol Yönetici denetleyicisinin istekleriyle eşleşer. Bu durumda, istekleri Yönetici yoluyla eşleşmese bile uzak kullanıcılar Yönetici denetleyicisinin eylemlerini çağırmaya devam edebilir.