ASP.NET MVC自定义角色提供程序不起作用

时间:2014-08-21 20:55:14

标签: c# asp.net-mvc-4 roles asp.net-authorization

我已经使用下面的代码设置了一个自定义角色提供程序,除了它似乎从未被使用过,并且正在使用默认提供程序。当使用[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错误,所以我假设我正在通过身份验证。

我已根据this SO post清除了浏览器Cookie,但这没有效果。

CustomerRoleProvider

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

}

的web.config

    <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();
    }
}

1 个答案:

答案 0 :(得分:5)

这是因为未将IIS Express设置为使用Windows身份验证。要解决此问题,我在解决方案资源管理器中选择了项目,打开了属性窗口集Windows Authentication = EnabledAnonymous Authentication = Disabled。自定义角色提供程序现在可以使用。