C# 单元测试项目针对 WebApi 与 Owin 一起



我的目标是在Visual Studio中针对我的Web API运行测试。我正在尝试调用控制器,就像我在网络上的某个地方看到的那样。

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。我的控制器以这样的内容开头:

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

当我尝试运行测试时,Request为空,并且出现错误。有人知道如何做我想做的事情吗?

编辑

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

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

"user_id"不存在,但我正在传递令牌。

可以在初始化期间显式设置控制器的 Request 属性。控制器具有请求后,可以添加可从控制器操作获得的属性。

如果使用请求属性进行身份验证,则需要执行更多步骤才能安全地处理该操作(有关 API 令牌的示例,请参阅保护并安全地调用 Web API 和 [授权])

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);

最新更新