gpt4 book ai didi

asp.net-web-api - 使用自定义授权测试异步 Web api 方法

转载 作者:行者123 更新时间:2023-12-01 05:16:56 24 4
gpt4 key购买 nike

我有一个 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
}

这在实际应用中似乎工作正常,其中自定义 IHttpModuleHttpContext.User 中设置主体和 Thread.CurrentPrincipal .

但是,从单元测试调用时:
Thread.CurrentPrincipal = principal;
var response = controller.Get(id).Result;
Userawait 之后重置(即继续),所以测试失败。在 R#8 下运行时会发生这种情况,而在 R#7 下则不会发生这种情况。

我的解决方法是在第一次等待之前保存当前主体,但这只是满足测试运行器需求的一种技巧。

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

最佳答案

我通过升级 MVC 包解决了这个问题。新版本保留主体在ApiController.RequestContext.Principal ,与 Thread.CurrentPrincipal 分开,完全避免了这个问题。

我的新测试代码开始于:

controller.RequestContext.Principal = principal;

关于asp.net-web-api - 使用自定义授权测试异步 Web api 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19427649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com