我创建了一个基本的MVC 4项目。添加了HomeController和Home \ Index.cshtml以及ContactUs.cshtml。 在Global.asax中为ContactUs添加路由。
添加文件夹验证并在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。
代码有问题吗?
答案 0 :(得分:17)
您的评论说您正在尝试实现this post中的内容,但您根本不是从该帖子复制的代码,而是复制了以前的SO帖子:Using custom authorization in 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;
}
}
}