2013-03-04 18 views
9

Ho creato un progetto MVC 4 di base. Aggiunti HomeController e Home \ Index.cshtml e ContactUs.cshtml. Aggiungi percorso in Global.asax per ContactUs.MVC 4 override AuthorizeAttribute non funzionante

Aggiungere una cartella Auth e aggiungere una classe Auth.css nella cartella Auth.

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; 
     } 
    } 
} 

In HomeController

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

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

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

Il problema è quando esegue il codice e visita http: // localhost: [numero porta qui]/Home/ContactUs, non colpisce sulla classe di override AuthAttribute.

Il codice ha qualcosa di sbagliato?

+1

cosa stai cercando di raggiungere? non è ovvio ... –

+0

Sto provando a personalizzare [Autorizza] su [Auth] e usarlo su cotrollers. Ciò mi consentirà di creare la mia autenticazione anziché utilizzare l'abbonamento standard. – user2130167

+0

Questo è quello che cerco di raggiungere. L'unica differenza è che MVC 4 non è per MVC3. http://weblogs.asp.net/jgalloway/archive/2012/05/04/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way.aspx – user2130167

risposta

16

Il tuo commento dice che stai cercando di ottenere ciò che è in this post, eppure non hai copiato il codice non da quel post, ma da un precedente post SO: Using custom authorization in MVC 4 che si riferiva all'API Web. E leggendo quel post vedi la differenza in ciò che AuthorizeAttribute usi. Si utilizza System.Web.Http anziché System.Web.Mvc.

Se è stato utilizzato il codice che lei ha fatto riferimento al tuo commento, allora si può trovare che avrebbe funzionato:

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

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

Grazie mille. È attivato ora. Grazie per l'aiuto. – user2130167

+0

@ user2130167 NP. Buona programmazione – MikeSmithDev

+0

doh! Grazie per quello. – AndyM

Problemi correlati