2008-10-28 60 views

回答

1

您的代码实际上是否需要通过ASP.NET登录的用户,还是只需要一个CurrentPrincipal?我不认为你需要以编程方式登录到您的网站。您可以创建一个GenericPrincipal,设置您需要的属性并将其附加到,例如Thread.CurrentPrincipal或模拟的HttpContext。如果您的代码实际上需要RolePrincipal或其他东西,那么我会更改代码以减少耦合到ASP.NET成员身份。

+0

我需要调用Membership.GetUser()返回当前登录的用户。 – ddc0660 2008-10-30 16:10:30

0

使用您的会员供应商,您可以使用Membership.ValidateUser验证用户。然后,您可以使用FormsAuthentication.SetAuthCookie来设置身份验证Cookie。只要你有一个cookie容器,这应该允许你登录一个用户。

2

我发现创建一个一次性类来处理设置和重置Thread.CurrentPrincipal是最方便的。

public class TemporaryPrincipal : IDisposable { 
     private readonly IPrincipal _cache; 

     public TemporaryPrincipal(IPrincipal tempPrincipal) { 
      _cache = Thread.CurrentPrincipal; 
      Thread.CurrentPrincipal = tempPrincipal; 
     } 

     public void Dispose() { 
      Thread.CurrentPrincipal = _cache; 
     } 
    } 

在测试方法中,您只是一个using语句这样的包装您的来电:

using (new TemporaryPrincipal(new AnonymousUserPrincipal())) { 
    ClassUnderTest.MethodUnderTest(); 
} 
13
if(Membership.ValidateUser("user1",[email protected])) 
     { 
      FormsAuthentication.SetAuthCookie("user1",true); 
} 
相关问题