我已经使用下面的代码设置了一个自定义角色提供程序,但它似乎从未被使用过,而是使用了默认提供程序。[Authorize(Roles = "Administrator")]
当使用属性装饰 HomeController 时,CustomRoleProvider
正在调用构造函数(我只包含构造函数以查看是否会命中断点),但没有调用任何方法。然后我只剩HTTP Error 401.0 - Unauthorized
下一页。
除了向 web.config 添加必要的位之外,我没有做任何其他事情来让 Windows 身份验证正常工作。我认为它正在工作,因为如果我不包含<allow users="*"></allow>
(显然没有包含Authorize
属性)我会收到一个401.2.: Unauthorized: Logon failed due to server configuration
错误,所以我假设我正在通过身份验证。
我已经按照这个 SO 帖子清除了我的浏览器 cookie,但这没有任何效果。
客户角色提供者
public class CustomRoleProvider : RoleProvider
{
public CustomRoleProvider()
{
}
public override bool IsUserInRole(string username, string roleName)
{
bool isUserInRole = false;
// omitted for brevity
return isUserInRole;
}
public override string[] GetRolesForUser(string username)
{
string[] roles = null;
// omitted for brevity
return roles;
}
// omitted for brevity
}
网络配置
<authentication mode="Windows">
</authentication>
<authorization>
<allow users="*"></allow>
<deny users="?"/>
</authorization>
<roleManager defaultProvider="CustomRoleProvider" enabled="true">
<providers>
<clear />
<add name="CustomRoleProvider" type="ProjectName.UI.Mvc.Code.Providers.CustomRoleProvider" />
</providers>
</roleManager>
家庭控制器
[Authorize(Roles = "Administrator")]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}