.Net MinimalApis响应返回值

💡 原文中文,约12100字,阅读约需29分钟。
📝

内容提要

本文介绍了在MinimalApis中使用自定义IResultModel和系统自带IResult进行响应返回值的方法。同时讲解了MinimalApis支持的返回值类型和如何配置全局的Json序列化选项。还介绍了自定义IResultModel和ResultModel的实现以及如何使用中间件自动包装返回值。最后还介绍了TypedResults类和Results类的使用以及如何自定义Json格式和处理其他类型的响应。

🔎

延伸解读

返回值类型决定响应格式

MinimalApis 对 string、T 和 IResult 三类返回值的处理方式不同:string 直接以 text/plain 写入,T 会经 JSON 序列化返回 application/json,而 IResult 由实现类自行决定响应内容。这意味着选择哪种返回类型,会直接影响 Content-Type 和状态码行为。例如直接返回 T 时状态码固定为 200,无法表达多种结果,因此文章指出这种方式比较局限。

统一响应格式的取舍

文章通过自定义 IResultModel 和 ResultModel 提供统一响应结构,包含 IsSuccess、Message、StatusCode、Timestamp 和 Data 等字段,并借助中间件和 EnableResponseWrapperAttribute 自动包装返回值。这种方式适合业务码与 HTTP 状态码需要分离的系统。但中间件会先缓冲响应再重新序列化,可能带来额外开销,且示例中反序列化为 dynamic 再包装,实际使用时需注意类型和异常处理。

TypedResults 与 Results 的差异

TypedResults 返回强类型对象,能提升代码可读性、改进单元测试并减少运行时错误,同时自动为 OpenAPI 提供响应类型元数据。文章示例显示,使用 TypedResults.Ok 时无需额外调用 Produces 即可添加元数据描述。对于可能返回多种结果的终结点,可以使用 Results<Ok<User>, NotFound> 联合类型来明确表达。若项目没有业务码分离需求,TypedResults 通常更合适。

自定义响应与局部配置

除了全局 ConfigureHttpJsonOptions,文章还展示了针对单个路由终结点配置个性化 JSON 格式的方法,以及通过扩展 IResult 返回 HTML 内容。此外,TypedResults 支持返回 ProblemDetails 等标准错误结构。这些能力说明 MinimalApis 在保持简洁的同时,仍可通过扩展方法和局部选项满足文件、流、认证等多样化响应需求,具体选择应结合项目实际情况。

❓

Q&A

MinimalApis中如何使用自定义IResultModel?

在MinimalApis中,可以通过实现IResultModel接口来创建自定义响应模型,并在API中返回该模型。

如何全局配置Json序列化选项?

可以通过调用ConfigureHttpJsonOptions方法来全局配置Json序列化选项,例如设置忽略循环引用和格式化输出。

TypedResults类有什么优势?

TypedResults类提供了强类型支持,增强了代码可读性,改进了单元测试,并减少了运行时错误的可能性。

如何使用中间件自动包装返回值?

可以创建一个中间件,并在API方法上使用EnableResponseWrapperAttribute特性来启用自动包装功能。

MinimalApis支持哪些返回值类型?

MinimalApis支持的返回值类型包括string、T(任何其他类型)和基于IResult的返回值。

如何自定义返回Html格式的响应?

可以通过扩展方法创建一个HtmlResult类,并在API中返回该类的实例来实现Html格式的响应。

🏷️

标签

➡️

继续阅读