【发布时间】:2013-04-05 15:54:59
【问题描述】:
在我的 MVC 4 Web API 项目中,我有一个自定义角色提供程序,它通过我的主页 System.Web.Mvc.Controller 上的 System.Web.Mvc.Authorize 属性按设计工作。
在任何 System.Web.Http.ApiController 和 System.Web.Http.Authorize 上,自定义角色提供程序永远不会被调用,总是返回 false。有没有办法指定 Web API AuthorizeAttribute 选择我的自定义角色提供程序,如 MVC AuthorizeAttribute?
角色提供者:
public class CustomRoleProvider : RoleProvider
{
//Overriden methods
public override string[] GetRolesForUser(string username)
{
//Always return "Master" for testing purposes
return new string[] { "Master" };
}
public override bool IsUserInRole(string username, string roleName)
{
//Always return true for testing purposes
return true;
}
//Other overridden method stubs...
}
Web.config:
<roleManager defaultProvider="CustomRoleProvider" enabled="true" cacheRolesInCookie="false" >
<providers>
<clear />
<add name="CustomRoleProvider" type="MyApp.SecurityExtensions.CustomRoleProvider, MyApp" />
</providers>
</roleManager>
【问题讨论】:
-
它只从 MVC 控制器中命中它。使用
[System.Web.Http.Authorize(Roles = "Master")]立即从 API 控制器评估为 false -
我会关闭缓存进行测试...
-
Cookies 每次会话都会过期,所以我刚刚关闭了浏览器,但如果我在调试时忘记关闭浏览器,这仍然是一件好事。我更新了 OP 以反映关闭缓存
标签: c# asp.net asp.net-mvc asp.net-web-api