尝试获取响应的 Content-Type 标头会导致 xUnit 出现异常

问题描述 投票:0回答:1

由于某种原因,此 xUnit 测试的最后一个断言抛出异常:

System.InvalidOperationException : Misused header name, 'Content-Type'. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.

[Fact]
public async Task MapGet_Should_Return_the_Correct_Student_When_They_Exist_With_200OK()
{
    //Arrange
    await using var application = new WebApplicationFactory<Program>();
    using HttpClient? client = application.CreateClient();

    //Act
    await client.PostAsJsonAsync("/student/s1", new Student("X", "Y", "Z"));  

    HttpResponseMessage? result = await client.GetAsync("/student/s1");

    string? contentAsString = await result.Content.ReadAsStringAsync();

    var contentAsStudentObject =
        JsonConvert.DeserializeObject<Student>(contentAsString);

    //Assert
    Assert.Equal(HttpStatusCode.OK, result.StatusCode);

    Assert.NotNull(contentAsStudentObject);

    Assert.Equal("X", contentAsStudentObject.FirstName);
    Assert.Equal("Y", contentAsStudentObject.LastName);
    Assert.Equal("Z", contentAsStudentObject.FavouriteSubject);

    Assert.Equal("application/json; charset=utf-8", result.Headers.GetValues("Content-Type").First());
}

我不明白为什么会这样。这正是我正在做的事情。我正在使用带有 HttpResponseMessage 对象的响应标头(即

result
)。

我不确定实际测试这个确切的东西是否有一些意义,因为它是框架自动为我们做的事情。哪个中间件实际上负责这个(设置响应的

Content-Type
)?我仍然不明白为什么会发生异常,所以这就是我发布问题并认为它成立的原因。

请求的响应标头:

(响应的)正文是:

{
    "firstName": "x",
    "lastName": "y",
    "favouriteSubject": "z"
}

有人能发现发生了什么吗?谢谢!

P.P.我刚刚发现该代码适用于

Assert.Equal("application/json; charset=utf-8", result.Content.Headers.GetValues("Content-Type").First());

为什么我们不能以其他方式访问它?

asp.net-core http http-headers xunit response-headers
1个回答
0
投票

您可以查看与 HttpRequestHeaderCollection,HttpResponseHeaderCollection,HttpContentHeaderCollection

相关的文档

文档中提到的标头,如

Content-Length
Content-type
Content-Language
(与请求体相关)只能添加到/从
HttpContentHeaderCollection
获取,一旦你尝试将它们添加到/获取
 HttpRequestHeaderCollection
/
HttpResponseHeaderCollection
,会发生错误并提及您滥用了标题(如果您尝试
client.DefaultRequestHeaders.Add("Content-type",....)
,您也会得到相同的错误)

一些相关问题:

无法在 HttpResponseMessage 标头上设置 Content-Type 标头?

© www.soinside.com 2019 - 2024. All rights reserved.