C# 重构许多重复的ProductsResponseType使其干燥
目前,我有20个端点具有与这3行C# 重构许多重复的ProductsResponseType使其干燥,c#,asp.net-core,swagger,C#,Asp.net Core,Swagger,目前,我有20个端点具有与这3行ProducesResponseType相同的代码。我正在使用.NETCore3.1和Swagger。我如何重构我的代码使之干燥(不要重复自己) ASP.NET核心支持以下功能: …包括提取通用API文档并将其应用于程序集中的多个操作、控制器或所有控制器的方法 第一步是创建一个静态类,其中包含定义约定的方法: public static class SomeApiConvention { [ProducesResponseType(StatusCodes.
ProducesResponseType
相同的代码。我正在使用.NETCore3.1和Swagger。我如何重构我的代码使之干燥(不要重复自己)
ASP.NET核心支持以下功能:
…包括提取通用API文档并将其应用于程序集中的多个操作、控制器或所有控制器的方法
第一步是创建一个静态类
,其中包含定义约定的方法:
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]
属性禁用此特定功能,以便无论操作的方法名称如何,都使用约定
要将此约定应用于控制器,请使用[ApiConventionType]
属性:
[ApiConventionType(typeof(SomeApiConvention))]
public class Controller1 : ControllerBase
[ApiConventionMethod(typeof(SomeApiConvention), nameof(SomeApiConvention.Default))]
public IActionResult Action1()
这种方法将约定应用于控制器定义的每个操作,因为[ApiConventionNameMatch]
配置已经突出显示。或者,如果将Default
更改为其他内容,例如Get
,并删除[ApiConventionType]
属性,则约定将仅适用于名为Get
的操作
要仅将约定应用于特定操作,请使用[ApiConventionMethod]
属性:
[ApiConventionType(typeof(SomeApiConvention))]
public class Controller1 : ControllerBase
[ApiConventionMethod(typeof(SomeApiConvention), nameof(SomeApiConvention.Default))]
public IActionResult Action1()
这种方法需要应用约定类的类型和方法的名称
这项功能还有很多,我已经提到的文档中已经描述了这项功能。我不会在这里重复所有这些内容,因为我希望上面包含的信息足以让您达到您想要达到的目标。我不知道自定义属性是否能够实现您的目标