繁体   English   中英

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

[英].NET Core TestServer returns status 200 instead of 404 for post request to non-existent path

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

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

获取请求测试按预期运行,因为它返回 404 状态代码。 但是,即使路径不存在,发布请求也会返回 200 状态。 什么可能导致此问题,我该如何解决?

如果我在本地运行服务器并在不存在的端点上手动触发 post 请求,它会按预期运行,因此问题仅限于这些集成测试。

编辑:这是我的 controller class 定义:

[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 中附加了一个自定义中间件,它有一个错误,所以它吞下了其他中间件生成的 404 并输出 200。 它本应处理特定类型的错误,但该错误导致它处理的错误范围比预期的要广泛得多。 删除有问题的中间件解决了这个问题。

有关更多详细信息,有问题的自定义中间件正在检查其他中间件层抛出的异常中的特定“HResult”,但 HResult 值引用的 AggregateException 比我正在寻找的特定错误(这是在响应已经开始流式传输后写入响应)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM