首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用自定义授权测试异步web api方法

使用自定义授权测试异步web api方法
EN

Stack Overflow用户
提问于 2013-10-17 13:09:17
回答 1查看 905关注 0票数 4

我有一个WebApi方法,大致如下所示:

代码语言:javascript
复制
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
}

在实际应用程序中,这似乎很好,其中自定义IHttpModuleHttpContext.UserThread.CurrentPrincipal中都设置了主体。

但是,当从单元测试调用时:

代码语言:javascript
复制
Thread.CurrentPrincipal = principal;
var response = controller.Get(id).Result;

Userawait (即继续)之后被重置,因此测试失败。在R#8下运行时会发生这种情况,而在R#7中则不会发生这种情况。

我的解决办法是在第一次等待之前保存当前的主体,但这只是满足测试运行程序需求的一次攻击。

我如何调用我的控制器方法,并确保延续具有与原始调用相同的主体?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-22 15:38:56

我通过升级MVC包来修正这个问题。新版本将主体保留在ApiController.RequestContext.Principal中,与Thread.CurrentPrincipal分离,完全避免了这个问题。

我的新测试代码以:

代码语言:javascript
复制
controller.RequestContext.Principal = principal;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19427649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档