如何从 AuthorizationFilterAttribute 重构出 HttpContext 以进行测试?
How do I refactor out HttpContext from AuthorizationFilterAttribute for testing?
我看到了这段代码,但由于它引用了 HttpContext,所以无法对其进行测试。如何删除对 HttpContext 的依赖以使其可测试?
public class AuthorizeByUserStatus :AuthorizationFilterAttribute
{
private readonly UserStatusEnum status;
public AuthorizeByUserStatus(UserStatusEnum status)
{
this.status = status;
}
public override async Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
var authorize = false;
var user = HttpContext.Current.User;
var userIdentity = user.GetIdentity();
if (userIdentity.UserStatus >= status)
{
authorize = true;
}
if (authorize)
{
base.OnAuthorization(actionContext);
}
else
{
throw new HttpResponseException(HttpStatusCode.Unauthorized);
}
}
}
替换静态HttpContext方法并引用传入的actionContext,其中包含我们需要的信息!
var userIdentity = actionContext.RequestContext.Principal.GetIdentity();
您现在可以传入带有正确设置的请求详细信息的 actionContext 以获取请求用户的身份。
我看到了这段代码,但由于它引用了 HttpContext,所以无法对其进行测试。如何删除对 HttpContext 的依赖以使其可测试?
public class AuthorizeByUserStatus :AuthorizationFilterAttribute
{
private readonly UserStatusEnum status;
public AuthorizeByUserStatus(UserStatusEnum status)
{
this.status = status;
}
public override async Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
var authorize = false;
var user = HttpContext.Current.User;
var userIdentity = user.GetIdentity();
if (userIdentity.UserStatus >= status)
{
authorize = true;
}
if (authorize)
{
base.OnAuthorization(actionContext);
}
else
{
throw new HttpResponseException(HttpStatusCode.Unauthorized);
}
}
}
替换静态HttpContext方法并引用传入的actionContext,其中包含我们需要的信息!
var userIdentity = actionContext.RequestContext.Principal.GetIdentity();
您现在可以传入带有正确设置的请求详细信息的 actionContext 以获取请求用户的身份。