2013-03-04 16 views
9

Temel bir MVC 4 projesi oluşturdum. HomeController ve Home \ Index.cshtml ve ContactUs.cshtml eklendi. ContactUs için Global.asax'ta rota ekleyin.MVC 4 geçersiz kılma AuthorizeAttribute çalışmıyor

Bir Klasör Auth ekleyin ve Auth klasörüne Auth.css sınıfı ekleyin. HomeController

public class HomeController : Controller 
    { 
     // 
     // GET: /Home/ 

     public ActionResult Index() 
     { 
      return View(); 
     } 

     // 
     // GET: /Home/ 
     [Auth]  
     public ActionResult ContactUs() 
     { 
      return View(); 
     } 
    } 

yılında

using System; 
using System.Web; 
using System.Web.Http; 
using System.Net.Http; 


namespace MvcApplicationTestProject1 
{ 
    public class AuthAttribute : AuthorizeAttribute 
    { 
     //public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) 
     //{ 
     // HandleUnauthorizedRequest(actionContext); 
     //}   

     protected override void HandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext) 
     { 
      var response = actionContext.Request.CreateResponse(System.Net.HttpStatusCode.Redirect); 
      response.Headers.Add("Location", "http://www.google.com"); 
      actionContext.Response = response; 
     } 
     //MVC 4 Web.Http.AuthorizeAttribute has IsAuthorized function but not AuthorizeCore 
     protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext) 
     { 
      return false; 
     } 
    } 
} 

sorun olduğunda kod çalıştırılır ve http: // localhost: [port numarası buradan]/Ev/ContactUs, o geçersiz kılma sınıfına isabet etmez AuthAttribute.

Kod yanlış bir şey mi var?

+1

size ulaşmak için ne çalışıyorsunuz? Açık değil ... –

+0

[Yetkilendir] 'i [Auth]' a göre özelleştirmeye çalışıyorum ve bebek karyolalarında kullanıyorum. Bu, standart üyeliği kullanmak yerine kendi kimlik doğrulamayı oluşturmam için esneklik sağlayacaktır. – user2130167

+0

Bu, elde etmeye çalıştığım şey. Sadece farklılık MVC 4'tür, ancak MVC3 için değildir. http://weblogs.asp.net/jgalloway/archive/2012/05/04/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way.aspx – user2130167

cevap

16

Yorumunuz, this post öğesinin ne olduğunu anlamada çalıştığınızı ve henüz kodun o gönderiden değil, önceki bir SO yayından kopyaladığınızı söylüyor: Using custom authorization in MVC 4 Web API'sine atıfta bulunuyordu. Ve bu yazıyı okurken, farkın ne olduğunu kullandığınız AuthorizeAttribute'de bulabilirsiniz. System.Web.Mvc yerine System.Web.Http kullanıyorsunuz.

Eğer yorumunuzda değinilen kod kullandıysanız, o zaman o iş olur bulacağını:

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

namespace MvcApplicationTestProject1 
{ 
    public class AuthAttribute : AuthorizeAttribute 
    { 
     protected override bool AuthorizeCore(HttpContextBase httpContext) 
     { 
      return false; 
     } 
    } 
} 
+0

Çok teşekkürler. Şimdi tetikleniyor. Yardım ettiğin için teşekkür ederim. – user2130167

+0

@ user2130167 NP. Mutlu programlama. – MikeSmithDev

+0

doh! Bunun için teşekkürler. – AndyM