gpt4 book ai didi

c# - 重构许多重复的 ProducesResponseType 以使其干燥

转载 作者:行者123 更新时间:2023-12-04 17:23:35 25 4
gpt4 key购买 nike

目前,我有 20 个端点与这 3 行 ProducesResponseType 的代码相同.我正在使用 .NET Core 3.1 和 Swagger。我如何重构我的代码以使其变干(不要重复自己)?

[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(SuccessResponse))]
[ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ErrorResponse))]
[ProducesResponseType(StatusCodes.Status500InternalServerError, Type = typeof(ErrorResponse))]
public IActionResult Controller1(){
// code removed for brevity
}

[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(SuccessResponse))]
[ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ErrorResponse))]
[ProducesResponseType(StatusCodes.Status500InternalServerError, Type = typeof(ErrorResponse))]
public IActionResult Controller2(){
// code removed for brevity
}

[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(SuccessResponse))]
[ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ErrorResponse))]
[ProducesResponseType(StatusCodes.Status500InternalServerError, Type = typeof(ErrorResponse))]
public IActionResult Controller3(){
// code removed for brevity
}

最佳答案

ASP.NET Core 支持 Web API Conventions , 哪个:

...includes a way to extract common API documentation and apply it to multiple actions, controllers, or all controllers within an assembly.


第一步是创建一个 static class ,使用定义约定的方法:
public static class SomeApiConvention
{
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(SuccessResponse))]
[ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ErrorResponse))]
[ProducesResponseType(StatusCodes.Status500InternalServerError, Type = typeof(ErrorResponse))]
[ApiConventionNameMatch(ApiConventionNameMatchBehavior.Any)]
public static void Default() { }
}
类的名称并不重要,但方法的名称会影响约定的应用方式。在上面的例子中, [ApiConventionNameMatch]属性禁用此特定功能,以便无论操作的方法名称如何都使用约定。
要将此约定应用于 Controller ,请使用 [ApiConventionType]属性:
[ApiConventionType(typeof(SomeApiConvention))]
public class Controller1 : ControllerBase
由于 [ApiConventionNameMatch],这种方法将约定应用于 Controller 定义的每个 Action 。配置已经突出显示。或者,如果您更改了 Default到别的东西,例如 Get ,并删除了 [ApiConventionType]属性,该约定仅适用于名为 Get 的操作。 .
要将约定仅应用于特定操作,请使用 [ApiConventionMethod]属性:
[ApiConventionMethod(typeof(SomeApiConvention), nameof(SomeApiConvention.Default))]
public IActionResult Action1()
这种方法期望 Type约定类的名称和要应用的方法的名称。

这个特性还有很多,在我已经提到的文档中进行了描述。我不会在这里重复所有这些,因为我希望上面包含的信息足以让你到达你想去的地方。

关于c# - 重构许多重复的 ProducesResponseType 以使其干燥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64814975/

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