我有一个WebApi方法,大致如下所示:
public async Task<HttpResponseMessage> Get(Guid id)
{
var foo = await Store.GetFooAsync(id);
if (foo.BelongsTo != User.Identity.Name)
throw new HttpResponseException(HttpStatusCode.Forbidden);
//return foo here
}在实际应用程序中,这似乎很好,其中自定义IHttpModule在HttpContext.User和Thread.CurrentPrincipal中都设置了主体。
但是,当从单元测试调用时:
Thread.CurrentPrincipal = principal;
var response = controller.Get(id).Result;User在await (即继续)之后被重置,因此测试失败。在R#8下运行时会发生这种情况,而在R#7中则不会发生这种情况。
我的解决办法是在第一次等待之前保存当前的主体,但这只是满足测试运行程序需求的一次攻击。
我如何调用我的控制器方法,并确保延续具有与原始调用相同的主体?
发布于 2013-10-22 15:38:56
我通过升级MVC包来修正这个问题。新版本将主体保留在ApiController.RequestContext.Principal中,与Thread.CurrentPrincipal分离,完全避免了这个问题。
我的新测试代码以:
controller.RequestContext.Principal = principal;https://stackoverflow.com/questions/19427649
复制相似问题