Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重构许多重复的ProductsResponseType使其干燥_C#_Asp.net Core_Swagger - Fatal编程技术网

C# 重构许多重复的ProductsResponseType使其干燥

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.

目前,我有20个端点具有与这3行
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()
这种方法需要应用约定类的
类型和方法的名称



这项功能还有很多,我已经提到的文档中已经描述了这项功能。我不会在这里重复所有这些内容,因为我希望上面包含的信息足以让您达到您想要达到的目标。

我不知道自定义属性是否能够实现您的目标