11

我创建了一个基本的 MVC 4 项目。添加了 HomeController 和 Home\Index.cshtml 和 ContactUs.cshtml。在 Global.asax 中为 ContactUs 添加路由。

添加一个文件夹 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:[port number here]/Home/ContactUs 时,它没有命中覆盖类 AuthAttribute。

代码有问题吗?

4

1 回答 1

18

您的评论说您正在尝试实现这篇文章中的内容,但您根本不是从那篇文章中复制代码,而是从之前的 SO 帖子中复制代码:在 MVC 4 中使用自定义授权,它指的是 Web 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;
        }
    }
}
于 2013-03-04T03:42:45.513 回答