我目前正在使用 MVC 4 Web API 项目类型开发 Web API。我目前处于需要为 API 添加一些安全性的阶段。我知道 Authorize 属性,但是,客户更喜欢不同的方法。为此,我尝试在我自己的类中覆盖 Authorize 属性,作为一个基本的开始,我只是让 AuthorizeCore 始终返回 false,这应该意味着未经过身份验证。如果我随后将其添加到控制器中的动作中,则动作总是完成并且我总是检索数据。我认为原因可能是由于未在 web.config 文件中注册自定义属性,但是,我不确定在不使用表单身份验证时如何处理。
我用来测试的代码是一个全新的 MVC 4 Web API 项目,其自定义属性如下所示。
public class Auth : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return false;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("http://www.google.com");
}
}
然后,我将属性添加到默认 ValuesController 的 Get 方法中
[Auth]
public IEnumerable<string> Get()
但是,当我导航到 domain/api/Values 时,我总是看到数据而不是预期的重定向到谷歌。任何帮助表示赞赏。
编辑:多看了一下后,我在这里找到了这个:http ://weblogs.asp.net/jgalloway/archive/2012/05/04/asp-net-mvc-authentication-customizing-authentication-and-authorization-the -right-way.aspx这表明我选择了错误的 AuthorizeAttribute 类,因为我从 System.Web.MVC 中选择了一个,而不是从 System.Web.Http 中选择了一个。看起来 Http 版本不允许与 MVC 版本相同级别的配置,因为它不允许我覆盖 AuthorizeCore。对此的任何更多帮助表示赞赏。