如何创建 HttpRequestHeaders 类的实例

35

我需要对使用HttpRequestHeaders作为参数的类进行单元测试。

    public HeaderValueProvider(HttpRequestHeaders headers)
    {
        _headers = headers;
    }
3个回答

29

HttpRequestHeaders 只有内部构造函数。 但您可以通过创建 HttpRequestMessage 对象来实现:

using var headers = new HttpRequestMessage().Headers;

4
谢谢。一个不需要创建完整的 HttpClient 的解决方案会更好。请注意,HttpRequestMessage 是可处理的,因此您可能需要将其放在 using 块中。 - Timo
@Timo,你是对的。 在c# 8.0中,你可以写成: using var headers = new HttpRequestMessage().Headers; - wolszakp
这看起来真的会处理头信息而不是 HttpRequestMessage。你确定它会做你想要的吗?也许有些我不知道的魔法…… - Timo
3
Timo,你是对的。应该这样写: using var message = new HttpRequestMessage(); var headers = message.Headers; - wolszakp

19
你可以通过以下方式获取一个空的 HttpRequestHeaders 实例:
var headers = new HttpClient().DefaultRequestHeaders;

0
另一种不需要构建任何资源的方法是使用Activator。有一个特殊的参数nonPublic,用于Activator.CreateInstance

nonPublic:如果可以匹配公共或非公共的无参数构造函数,则为true;如果只能匹配公共的无参数构造函数,则为false。

以下是此方法的示例:

var headers = (HttpRequestHeaders)Activator.CreateInstance(typeof(HttpRequestHeaders), nonPublic: true);

这是一个展示如何使用的.NET Fiddle示例:https://dotnetfiddle.net/YmW1T8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接