首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ASP.NET的最小API中从IResult中获取响应值

在ASP.NET的最小API中从IResult中获取响应值
EN

Stack Overflow用户
提问于 2022-03-02 12:51:23
回答 3查看 1.9K关注 0票数 0

我正在将一个项目移植到新的minimal of ASP.Net 6。

现在我有一个类似的东西:

代码语言:javascript
运行
复制
builder.MapGet("/hello", CiaoCiao);

IResult CiaoCiao()
{
    return Results.Ok("Ciao ciao!");
}

将端点实现放在一个单独的函数中的原因是,我想为它编写一个单元测试。但我有以下问题:

如何从"Ciao ciao!"中获取响应值(在本例中为字符串IResult )

到目前为止,我还没有在官方文件中找到任何关于这方面的信息。有一个类Microsoft.AspNetCore.Http.Result.OkObjectResult,我可以投给它。但是这是AspNetCore的内部特性,所以我的单元测试项目无法访问它。

EN

回答 3

Stack Overflow用户

发布于 2022-03-02 12:56:08

这在ASP.NET核心6中是不可能的,因为IResult的所有实现都是内部的。

这是计划改进作为ASP.NET核心7的一部分。

通过HTTP接口对代码进行集成测试将是使用ASP.NET核心6使用WebApplicationFactory<T>类(文档)测试应用程序的端点的一种方法。

票数 3
EN

Stack Overflow用户

发布于 2022-03-02 13:11:40

我想出了一个解决办法,在他的回答中使用马丁·科斯特洛联合发行的github杂志中的一些代码:

代码语言:javascript
运行
复制
private static async Task<T?> GetResponseValue<T>(IResult result)
{
    var mockHttpContext = new DefaultHttpContext
    {
        // RequestServices needs to be set so the IResult implementation can log.
        RequestServices = new ServiceCollection().AddLogging().BuildServiceProvider(),
        Response =
        {
            // The default response body is Stream.Null which throws away anything that is written to it.
            Body = new MemoryStream(),
        },
    };

    await result.ExecuteAsync(mockHttpContext);

    // Reset MemoryStream to start so we can read the response.
    mockHttpContext.Response.Body.Position = 0;
    var jsonOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web);
    return await JsonSerializer.DeserializeAsync<T>(mockHttpContext.Response.Body, jsonOptions);
}

很丑,但看起来很管用。

票数 2
EN

Stack Overflow用户

发布于 2022-11-18 12:02:51

也可以做一些简单的事情,比如:

代码语言:javascript
运行
复制
        [Fact]
        public void Then_it_returns_bad_request_result() =>
            _result.ToString().Should().EndWith("BadRequestObjectResult");

这并不特别令人满意,但在我找到一个更好的使用.NET7的替代方案之前,我会做这个工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71323013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档