2013-03-04 7 views
9

私は基本的なMVC 4プロジェクトを作成しました。 HomeControllerとHome \ Index.cshtmlとContactUs.cshtmlを追加しました。 連絡先にGlobal.asaxのルートを追加します。MVC 4 Override AuthorizeAttribute not working

フォルダの認証を追加し、AuthフォルダにAuth.cssクラスを追加します。 HomeController

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

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

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

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

コードを実行して、httpを訪問したときに問題がある:// localhostを:[ポート番号ここ] /ホーム/お問い合わせ、 それはオーバーライドクラスにヒットしません。 AuthAttribute。

コードに問題がありますか?

+1

をあなたが達成しようとしていますか?その明らかではない... –

+0

[認証]を[認証]にカスタマイズし、それをcotrollersで使用しようとしています。これにより、標準のメンバーシップを使用する代わりに自分の認証を構築する柔軟性が得られます。 – user2130167

+0

これは私が達成しようとしているものです。違いはMVC 4だけですが、MVC 3ではありません。 http://weblogs.asp.net/jgalloway/archive/2012/05/04/asp-net-mvc-authentication-customizing-authentication-and-authorization-the-right-way.aspx – user2130167

答えて

16

あなたのコメントには、this postにあるものを達成しようとしているにもかかわらず、その投稿からではなく、以前のSO投稿からコードをコピーしたと言います。Using custom authorization in MVC 4はWeb APIを指していました。そして、あなたが使用しているAuthorizeAttributeの違いがその記事を読むことで分かります。 System.Web.Mvcの代わりにSystem.Web.Httpを使用しています。

あなたがあなたのコメントで言及したコードを使用した場合、その後、あなたはそれがうまくいく見つけるだろう:

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

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

ありがとうございます。今すぐ起動されます。ご協力いただきありがとうございます。 – user2130167

+0

@ user2130167 NP。ハッピープログラミング。 – MikeSmithDev

+0

doh!ありがとうございました。 – AndyM