11

基本的なMVC4プロジェクトを作成しました。HomeControllerとHome\Index.cshtmlおよびContactUs.cshtmlを追加しました。ContactUsのGlobal.asaxにルートを追加します。

Folder 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:// localhost:[ここのポート番号] / Home / ContactUsにアクセスすると、オーバーライドクラスAuthAttributeにヒットしないことです。

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

4

1 に答える 1

18

あなたのコメントは、あなたがこの投稿の内容を達成しようとしていると言っていますが、その投稿からではなく、以前のSO投稿からコードをコピーしました: WebAPIを参照していたMVC4でのカスタム認証の使用。そして、その投稿を読むと、使用する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;
        }
    }
}
于 2013-03-04T03:42:45.513 に答える