.net 使用MVC 2.0定制角色Provider
我在应用程序中设置了自定义成员资格和角色提供程序。在ASP.Net Webforms中,我使用相同的提供程序,并且在编译和运行应用程序时,由于web.config中的引用,提供程序被初始化 当我将其移动到MVC并将断点放在这些类的初始化方法中时,断点不会被命中 奇怪的是:如果我在一个控制器中使用[AuthorizeRoles=MYROLE]进程并点击该操作,那么它就会转到Roleprovider并自动调用GetRolesForUser,但仍然不会点击初始化。这是一个问题,因为我需要在调用任何方法之前设置某些变量 我知道我可以直接调用Initialize,但我原以为这会像在ASP Webforms中那样自动完成.net 使用MVC 2.0定制角色Provider,.net,asp.net-mvc,asp.net-membership,roleprovider,.net,Asp.net Mvc,Asp.net Membership,Roleprovider,我在应用程序中设置了自定义成员资格和角色提供程序。在ASP.Net Webforms中,我使用相同的提供程序,并且在编译和运行应用程序时,由于web.config中的引用,提供程序被初始化 当我将其移动到MVC并将断点放在这些类的初始化方法中时,断点不会被命中 奇怪的是:如果我在一个控制器中使用[AuthorizeRoles=MYROLE]进程并点击该操作,那么它就会转到Roleprovider并自动调用GetRolesForUser,但仍然不会点击初始化。这是一个问题,因为我需要在调用任何方法
我必须在MVC中手动初始化它们,还是我遗漏了什么?Jay,我想它们的工作方式与ASP.NET WebForms中的角色/成员资格提供程序的工作方式相同 您应该尝试创建自定义授权筛选器,以调用您的应用程序方法,如下所示:
public class MyAuthorizeAttribute: FilterAttribute, IAuthorizationFilter
{
public string Role { get; set; }
#region IAuthorizationFilter Members
public void OnAuthorization(AuthorizationContext filterContext)
{
// add your logic here like
// var userRoles = MyCustomProvider.GetRolesForUser(filterContext.HttpContext.User.Identity);
// if(!userRoles.Contains(Role))
// .....
}
#endregion
}
然后在您的操作中使用[MyAuthorizeRole=MYROLE]。Jay,我想它们的工作方式与ASP.NET WebForms中的角色/成员资格提供程序的工作方式相同 您应该尝试创建自定义授权筛选器,以调用您的应用程序方法,如下所示:
public class MyAuthorizeAttribute: FilterAttribute, IAuthorizationFilter
{
public string Role { get; set; }
#region IAuthorizationFilter Members
public void OnAuthorization(AuthorizationContext filterContext)
{
// add your logic here like
// var userRoles = MyCustomProvider.GetRolesForUser(filterContext.HttpContext.User.Identity);
// if(!userRoles.Contains(Role))
// .....
}
#endregion
}
然后在您的动作中使用[MyAuthiReOL[MyLoe]。
两件事要考虑的是,首先成员和角色提供程序是静态的,通常只在应用程序中第一次访问它们时才初始化。当在Web.Config中正确设置时,它们将在首次访问时调用initialize
通过对一组基本的提供程序和默认的ASP.NET MVC 2应用程序进行测试,我发现RoleProvider通常在应用程序启动时立即初始化。但是需要注意的一点是,如果要重新初始化提供程序,则必须停止开发web服务器或iis express,或者清除应用程序池。这样应用程序就会重新启动。如果您不这样做,并且提供程序已经初始化,它将永远不会达到这些断点,因为它已经运行了 另外,在获取成员资格提供程序的实例时,不要通过创建类ie var provider=new MyMembershipProvider的新实例来实现,因为这不会调用initialize方法。请确保通过Membership.provider获得您的提供程序,它将处理正确配置的web.config提供程序的所有设置 仔细查看AccountModels文件第101行中的默认MVC 2应用程序,可以得到一个很好的示例_provider = provider ?? Membership.Provider;
第一次访问它时,它将实例化默认成员资格提供程序并调用initialize。之后,它对应用程序保持静态,直到应用程序从内存中卸载后才会再次调用。停止vs web开发服务器
此外,获取特定会员资格提供者的另一种类似方法也可以在以下网址找到:
希望这有助于:考虑两件事:首先,成员和角色提供者是静态的,通常只在应用程序中第一次访问它们时才初始化。当在Web.Config中正确设置时,它们将在首次访问时调用initialize 通过对一组基本的提供程序和默认的ASP.NET MVC 2应用程序进行测试,我发现RoleProvider通常在应用程序启动时立即初始化。但是需要注意的一点是,如果要重新初始化提供程序,则必须停止开发web服务器或iis express,或者清除应用程序池。这样应用程序就会重新启动。如果您不这样做,并且提供程序已经初始化,它将永远不会达到这些断点,因为它已经运行了 另外,在获取成员资格提供程序的实例时,不要通过创建类ie var provider=new MyMembershipProvider的新实例来实现,因为这不会调用initialize方法。请确保通过Membership.provider获得您的提供程序,它将处理正确配置的web.config提供程序的所有设置 仔细查看AccountModels文件第101行中的默认MVC 2应用程序,可以得到一个很好的示例
_provider = provider ?? Membership.Provider;
第一次访问它时,它将实例化默认成员资格提供程序并调用initialize。之后,它对应用程序保持静态,直到应用程序从内存中卸载后才会再次调用。停止vs web开发服务器
此外,获取特定会员资格提供者的另一种类似方法也可以在以下网址找到:
希望这有帮助:您应该在角色提供程序的构造函数中调用Initialize。@Nissan Fan:为什么我必须调用Initialize
在AP WebForms中,由于在web.config中设置了成员身份,它会自动调用Initialize方法。您应该在角色提供程序的构造函数中调用Initialize。@Nissan Fan:为什么在AP WebForms中,由于设置了成员身份,它会自动调用Initialize方法呢在web.config上?