SORU
10 Aralık 2008, ÇARŞAMBA


Nasıl ASP.NET MVC dinamik giriş adrese yönlendirmek için

Müşteriler için sayfaları barındıran çok kira bir web sitesi oluşturuyorum. URL birinci segment müşteri, Global olarak tanımlanmış tanımlayan bir dize olacaktır.asax aşağıdaki URL yönlendirme şeması:

"{client}/{controller}/{action}/{id}"

Bu gayet iyi çalışıyor, /foo/Home/Dizini gibi URL ile.

[Yetki] kullanarak öznitelik, ancak aynı zamanda aynı eşleme düzeni kullanan bir oturum açma sayfasına yönlendirmek istiyorum. Eğer istemci foo ise, oturum açma sayfası /foo/Hesap/sabit /Hesap/Giriş yönlendirme web tanımlanan yerine Giriş olur.config.

MVC sanırım ASP.NET sayfayı web olarak tanımlanan yönlendirme neden olan 401 yetkisiz bir durum, geri dönmek için bir HttpUnauthorizedResult kullanır.config.

Bu yüzden herkes ASP.NET giriş yönlendirme davranışı geçersiz kılmak için ya da biliyor mu? Yoksa özel yetki özniteliği oluşturarak, MVC yönlendirmek için daha mı iyi olur?

EDİT - Cevap:içine biraz araştırma sonra .Net kaynağı, özel kimlik doğrulaması özniteliği 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 }
                });
        }
    }
}

CEVAP
8 Temmuz 2009, ÇARŞAMBA


ASP.NET MVC RTM sürümü, özelliği eksik İptal. Bu kodu ASP.NET MVC RTM: ile çalışır

using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Resources;

namespace ePegasus.Web.ActionFilters
{
    public class CustomAuthorize : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);
            if (filterContext.Result is HttpUnauthorizedResult)
            {
                filterContext.Result = new RedirectToRouteResult(
                    new System.Web.Routing.RouteValueDictionary
                        {
                                { "langCode", filterContext.RouteData.Values[ "langCode" ] },
                                { "controller", "Account" },
                                { "action", "Login" },
                                { "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
                        });
            }
        }
    }
}

Düzenleme:Web formları varsayılan kimlik doğrulama loginUrl devre dışı bırakmak isteyebilirsiniz.birisi özel bir nitelik var ve yanlışlıkla [Yetki] inşa özniteliği kullanır unutur diye config -.

Web değiştirin.config:

 <forms loginUrl="~/Account/ERROR" timeout="2880" />

O zaman bir eylem yöntemi 'HATA' hata günlükleri ve en genel oturum açma sayfası için Kullanıcı yönlendirir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS Campus Life

    ASUS Campus

    18 Mart 2013
  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • schmittastic

    schmittastic

    9 EYLÜL 2009