You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法伪造request.Uri,OWIN中间件单元测试报错求助

解决OWIN中间件单元测试中AbsolutePath抛出异常的问题

问题原因

你创建了Fake的IOwinRequest并设置了Uri,但没有将这个Fake请求关联到IOwinContext上。中间件实际访问的context.Request并不是你配置的Fake实例,导致Uri可能是默认的相对路径,调用AbsolutePath时触发异常。

修复步骤

修改单元测试代码,确保Fake的IOwinContext返回你配置好的FakeIOwinRequest:

[Test]
public void MiddleWare_Should_Not_Call_Process_Request_IF_Uri_Does_Not_Match()
{
    // 创建Fake的Owin上下文
    var fakeContext = A.Fake<IOwinContext>();
    // 创建Fake的请求并配置Uri
    var fakeRequest = A.Fake<IOwinRequest>();
    A.CallTo(() => fakeRequest.Uri).Returns(new Uri("http://dummyUrl.com/login"));
    // 让上下文的Request属性返回我们的Fake请求
    A.CallTo(() => fakeContext.Request).Returns(fakeRequest);
    
    var middleware = new MyMiddleware(_owinMiddleware);
    middleware.Invoke(fakeContext).GetAwaiter().GetResult();

    // 注意:OWIN上下文的Response通常不会为null,建议根据实际逻辑调整断言
    // 比如断言Response未被修改,或某个特定属性符合预期
    // Assert.IsNull(fakeContext.Response);
}

额外说明

  • 确保FakeItEasy版本正确配置了所有依赖的Fake对象关联,避免未配置的属性返回默认值(比如相对Uri)。
  • 若仍有问题,检查中间件中是否还有其他依赖Request的属性未被Fake配置,导致触发异常。

内容的提问来源于stack exchange,提问作者Ask

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:12:41