gpt4 book ai didi

使用 Owin 针对 WebApi 的 C# 单元测试项目

转载 作者:太空宇宙 更新时间:2023-11-03 23:05:09 27 4
gpt4 key购买 nike

我的目标是在 Visual Studio 中针对我的 Web API 运行测试。我正在尝试调用 Controller ,正如我在网络上看到的那样。

var controller = new PriceFeedController();

dynamic item = controller.Get(1, 1);

controller.Post(new PostPriceFeed { Item_Id = 1, Store_Id = 1, Price = decimal.Parse(item.pricefeed.price) + 10 });
dynamic itemprice_updated = controller.Get(1, 1);
Assert.AreEqual(decimal.Parse(item.pricefeed.price), decimal.Parse(itemprice_updated.pricefeed.price));

主要问题是关于 OWIN。我的 Controller 以这样的方式开始:

[HttpGet]
public IHttpActionResult Get(long storeId, long itemId)
{
//busco o id do usuário
var user_id = SessionState.GetUserIDByContext(Request.GetRequestContext());
//...
}

当我尝试运行测试时,Request 为 null,我得到了一个错误。有人知道关于如何做我想做的事的教程吗?

编辑

@Peter 提示后,我可以插入一个请求,但我的声明不存在。

 ClaimsPrincipal principal = httpRequestContext.Principal as ClaimsPrincipal;
return long.Parse(principal.Claims.Where(c => c.Type == "user_id").Single().Value);

“user_id”不存在,但我正在传递 token 。

最佳答案

您可以在初始化期间显式设置 Controller 的 Request 属性。一旦 Controller 有一个请求,您就可以添加 Controller 操作可用的属性。

如果您使用请求属性进行身份验证,则需要更多步骤来安全地处理(有关 API token 的示例,请参阅 Securing and securely calling Web API and [Authorize])

var controller = new PriceFeedController {Request = new HttpRequestMessage()};
controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey,
new HttpConfiguration());

controller.Request.Properties.Add("sample_property",
"plaintext string to pass to Get() method on PriceFeed");

var result = controller.Get(100, 105);

关于使用 Owin 针对 WebApi 的 C# 单元测试项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41523349/

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