2013-03-04 55 views
9

我創建了一個基本的MVC 4項目。添加了HomeController和Home \ Index.cshtml和ContactUs.cshtml。 在Global.asax中爲聯繫人添加路由。MVC 4覆蓋AuthorizeAttribute不工作

添加一個文件夾Auth並在Auth文件夾中添加一個類Auth.css。

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

在HomeController的

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

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

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

問題是當運行代碼並訪問http://本地主機:這裏端口號] /首頁/聯繫我們, 它不打不上覆蓋類AuthAttribute。

代碼有問題嗎?

+1

什麼是你想達到什麼目的?它並不明顯... – 2013-03-04 01:46:16

+0

我正在嘗試將[Authorize]自定義爲[Auth]並在cotrollers上使用它。這將爲我創建自己的身份驗證而不是使用標準成員身份提供了靈活性。 – user2130167 2013-03-04 02:06:21

+0

這是我試圖實現的。唯一不同的是MVC 4,但不適用於MVC3。 http://weblogs.asp.net/jgalloway/archive/2012/05/04/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way.aspx – user2130167 2013-03-04 02:49:35

回答

16

您的評論說,你正在努力實現的是什麼this post,但你從該職位在所有複製的代碼,而是來自以前的一個SO帖子:Using custom authorization in MVC 4這指的是網絡API。在閱讀這篇文章時,你會發現不同之處在於你使用的是什麼AuthorizeAttribute。您正在使用System.Web.Http而不是System.Web.Mvc

如果您使用您在您的評論中提到的代碼,那麼你會發現它的工作:

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

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

非常感謝。它現在被觸發。謝謝你的幫助。 – user2130167 2013-03-04 03:54:47

+0

@ user2130167 NP。快樂編程。 – MikeSmithDev 2013-03-04 03:55:11

+0

doh!感謝那。 – AndyM 2013-08-17 09:47:12