Müşteriler için sayfalar barındıran çok kiracılı bir web sitesi oluşturuyorum. URL'nin ilk segmenti, aşağıdaki URL yönlendirme şeması kullanılarak Global.asax'ta tanımlanan istemciyi tanımlayan bir dize olacaktır:
"{client}/{controller}/{action}/{id}"
Bu, / foo / Home / Index gibi URL'lerde iyi çalışır.
Ancak, [Yetkilendir] özniteliğini kullanırken, aynı eşleme şemasını kullanan bir oturum açma sayfasına yeniden yönlendirmek istiyorum. Dolayısıyla, istemci foo ise, oturum açma sayfası web.config dosyasında tanımlanan sabit / Hesap / Oturum açma yönlendirmesi yerine / foo / Hesap / Oturum aç olacaktır.
MVC, 401 yetkisiz durumunu döndürmek için bir HttpUnauthorizedResult kullanır; bu, ASP.NET'in web.config içinde tanımlanan sayfaya yönlendirmesine neden olur.
Peki, ASP.NET oturum açma yeniden yönlendirme davranışını nasıl geçersiz kılacağını bilen var mı? Veya özel bir yetkilendirme özelliği oluşturarak MVC'de yeniden yönlendirme yapmak daha mı iyi olur?
DÜZENLEME - Cevap: .Net kaynağına biraz girdikten sonra, özel bir kimlik doğrulama özelliğinin en iyi çözüm olduğuna karar verdim:
public class ClientAuthorizeAttribute: AuthorizeAttribute
{
public override void OnAuthorization( AuthorizationContext filterContext )
{
base.OnAuthorization( filterContext );
if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult )
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "client", filterContext.RouteData.Values[ "client" ] },
{ "controller", "Account" },
{ "action", "Login" },
{ "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
});
}
}
}