gpt4 book ai didi

c# - .NET Core TestServer 返回状态 200 而不是 404 以将请求发送到不存在的路径

转载 作者:行者123 更新时间:2023-12-03 16:58:23 24 4
gpt4 key购买 nike

我正在使用以下指南为 .NET Core 3.1 应用程序实现集成测试:https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-3.1 .这是我当前的测试类:

public class IntegrationTests : IClassFixture<WebApplicationFactory<main_app.Startup>>
{
private readonly WebApplicationFactory<main_app.Startup> _factory;

public TestTest(WebApplicationFactory<main_app.Startup> factory) {
_factory = factory;
}

[Fact]
public async void GetBogusPath() {
var client = _factory.CreateClient();
var response = await client.GetAsync("ofajspd");
Assert.False(response.IsSuccessStatusCode);
}

[Fact]
public async void PostBogusPath() {
var client = _factory.CreateClient();
var request_body = new StringContent("{}", Encoding.UTF8, "application/json");
var response = await client.PostAsync("ofajspd", request_body);
Assert.False(response.IsSuccessStatusCode);
}
}
get 请求测试按预期运行,因为它返回 404 状态代码。但是,即使路径不存在,发布请求也会返回 200 状态。什么可能导致此问题,我该如何解决?
如果我在本地运行服务器并手动在不存在的端点上触发 post 请求,它会按预期运行,因此问题仅限于这些集成测试。
编辑:这是我的 Controller 类定义:
[ApiController]
[ApiVersion("1")]
[Route("v{version:apiVersion}/[controller]")]
public class QueryController : ControllerBase
{
[AcceptVerbs("Post")]
public async Task<QueryResponse> Post([FromBody]QueryRequest rq) {
return await QueryHandler.HandlePost(rq, this.HttpContext);
}
}

最佳答案

问题是我在 Startup.cs 中附加了一个有 bug 的自定义中间件,所以它吞下了其他中间件生成的 404 并输出 200。它本应处理特定类型的错误,但该错误导致它处理的错误范围比预期的要多得多。删除有问题的中间件解决了问题。
对于额外的细节,有问题的自定义中间件正在检查其他中间件层抛出的异常中的特定“HResult”,但 HResult 值引用了一个 AggregateException,它比我正在寻找的特定错误(这是在响应已经开始流式传输后写入响应)。

关于c# - .NET Core TestServer 返回状态 200 而不是 404 以将请求发送到不存在的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65039134/

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