6

Tüm özel AuthorizeAttribute'm neden MVC WebApi'mde çalışmadığımı bulmaya çalışırken İnternet üzerinden çalışıyorum. SO üzerinde bu tür şeyleri soruyor insanlar gördüm ama hiçbir şey beni henüz benim sorunu çözmeye yardımcı olmuştur: System.Web.Http aksineÖzel AuthorizeAttribute MVC Framework tarafından çağrılmadı

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, 
       Inherited = false)] 
    public sealed class CustomAuthorization : AuthorizeAttribute 
    { 

     //... 

     protected override bool AuthorizeCore(HttpContextBase httpContext) 
     { 
      // custom auth logic, returns true if authorized, false otherwise 
     } 
    } 

ben System.Web.Mvc uzanan ediyorum. Ancak, benim AuthorizeCore(HttpContextBase httpContext) asla denir.

[CustomAuthorization("Some Permission")] 
[System.Web.Http.HttpGet] 
public CustomResponse SomeAction() 
{ 
    //... 
} 

Ne elde umuyorum benim yetkiye sahip olmaktır:

Belirli bir eylem için gerekli benim özel izinler isimleri bir params string[] alır benim CustomAuthorization sınıfında yapıcı, örneğin var bir istek [CustomAuthorization] özniteliği ile dekore bir eyleme yapıldığında kod ateş etti. Ayrıca yetkilendirme başarısız olursa daha açıklayıcı yetkilendirme başarısız mesajı dönmek isterler. Sadece:

{"Message":"Authorization has been denied for this request."} 

bu ağır basan HandleUnauthorizedRequest gerektirir inanıyoruz ama yapabileceğim bu nasıl bir JSON yanıtı serialize edeceğini kendi nesne sağlamak için?

Özetlersek, [CustomAuthorization] özniteliğimle eylemleri dekore etsem bile yetki kodum hiçbir zaman çerçeve tarafından çağrılmaz. Sadece eylem içindeki kodu yürütmeye doğru gidiyor.

İkinci olarak, özel bir JSON nesnesini serileştirmek için yetkisiz yanıtları nasıl uygularım?

Yardımlarınız için şimdiden teşekkür ederiz, bu çok takdir!

+0

Özel bir yetkilendirme özniteliğini nasıl uygulandığım hakkındaki yorumlarım temel alıyor ... Başlamak için, Yetkilendirmeyi, Yetkilendirmeyi değil, Yetkilendirmeyi geçersiz kılmak istediğinizi düşünüyorum. Ayrıca, ben size sınıf mühürlü olması gerekir emin değilim. –

cevap

6

Tamam Sonunda bunu çözmüş ve bu nasıl:

public override void OnAuthorization(HttpActionContext actionContext) { 

    .... 

    if (!authorized) { 

     actionContext.Response =  
        actionContext.Request.CreateResponse(
            HttpStatusCode.Unauthorized, 
            new Dictionary<string, string> { 
               { "hello", "world" } 
            } 
       ); 

    } 

} sonuç üretir

:

{"hello":"world"} 

Sözlük nesne keyfi, sadece bir tip olduğunu gösterir Yanıt'a başarıyla serileştirilecektir.

actionContext.Response'u ayarlamazsanız, İstek hedef eyleme devam edecektir - yani. Bu filtreyle yetkilendirilmiş sayılır. bu pozisyonda başkalarına yardım

Umut.

+0

iyi ...... –

+0

çözüm çok basit bulmak için bir rahatlama oldu bitti! Çabalarınız için teşekkürler, çok takdir ediyorum. Artık her şey işe yarıyor! – ComethTheNerd

İlgili konular