如何整合与ASP.NET MVC国际奥委会成员资格提供如何整合与ASP.NET MVC国际奥委会成员

2019-05-13 11:18发布

我有我在我的MVC控制器,我也希望有ASP.NET MVC访问使用自定义成员资格/角色提供商,这样我就可以使用AuthorizationFilters等。由于很多人已经实现了自定义的供应商我想很多人都做过这一点,但我还没有想通了或发现,专门解决这个问题的帖子。 这个帖子是有点儿我的问题的另一面的。 在我来说,我有我的自定义的供应商,我的控制器运作良好,我想MVC使用它了。

我的供应商与IOC /依赖注入设计中实现。 该提供程序公开超越基准会员/角色API附加功能。 在我的控制器,我使用温莎城堡创建实例。 该代码类似于:

public class HomeController : Controller {
    IMembershipService _membershipService;
    public HomeController(IMembershipService membershipService) {
        _membershipService= membershipService;
    }
}

<castle>
 <components>
  <component id="MembershipService" 
             service="IMembershipService, MyApp" 
             type="MembershipService, MyApp" lifestyle="PerWebRequest">
    <parameters>
      <connectionString>#{defaultConnectionString}</connectionString>
    </parameters>
  </component>
 </components>
</castle>

public class WindsorControllerFactory : DefaultControllerFactory {
    private WindsorContainer _container;
    public WindsorControllerFactory() {
        _container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));

        List<Type> controllerTypes = new List<Type>();
        foreach (Type t in Assembly.GetExecutingAssembly().GetTypes()) {
            if (typeof(IController).IsAssignableFrom(t))
                controllerTypes.Add(t);
        }

        foreach (Type t in controllerTypes) {
            // LifestyleType.Transient = new controller instance for each request
            _container.AddComponentLifeStyle(t.FullName, t, LifestyleType.Transient);
        }
    }

    protected override IController GetControllerInstance(Type controllerType) {
        return (IController)_container.Resolve(controllerType);
    }

这一切工作在我的C#代码伟大的,但我想我的供应商的铁丝插入MVC使用[授权]过滤器与它:

[Authorize (Users="user1, user2", Roles="role8")]
public ViewResult MyResult(int x) {
    // implement
}

我知道,通常的方式告诉ASP.NET有关自定义成员资格或角色提供商中,如下所示的web.config文件,但如果我这样做ASP.NET只会尝试调用默认的构造函数,这是行不通的。 任何帮助表示赞赏。

<membership>
 <providers>
  <clear/>
  <add name="MyMembershipProvider" type="MyMembershipProvider">
 </providers>
</membership>

Answer 1:

得到这个工作,最简单的方法是使用ASP.NET的标准机制<membership>在web.config中。 你就让它使用默认的构造函数,但你重写初始化()和依赖性那里。 使用此作为参考。

就个人而言,由于这样的事情,我宁愿避免提供者模型完全,所以我使用类似的那些办法在单轨文档描述 。 恕我直言,这是不太臃肿,更灵活。 最后,它只是设置HttpContext.User中有适当的IPrincipal实现这是什么AuthorizeAttribute使用。

我最近在博客中提到的解决方案做适当的IoC和MembershipProviders 。



文章来源: How to integrate IoC Membership provider with ASP.NET MVC