在单个Web API方法中从多条路由中淘汰特定的路由

use*_*448 4 c# swagger asp.net-web-api2 asp.net-core-webapi asp.net-core-2.0

嗨,我有如下所示的WEB API实现。我们在单一方法上使用多条路线的地方。

[SwaggerOperation("Update Records By Id")]
    [Route("/construction/field-record")]
    [Route("/construction/fieldRecord")]
    public async Task<IActionResult> UpdateRecord([FromBody] UpdateRecordRequest request)
Run Code Online (Sandbox Code Playgroud)

两个问题

  1. 如何将仅两个路由中的一个标记为已弃用?
  2. 如何在swagger UI上更新指示路线已“弃用”的swagger?

-谢谢

Mat*_*ler 9

您可以添加一个检查RelativePath 的OperationFilter。该字符串包含路线的名称。只需指定 HttpPost/HttpGet 路由

[HttpPost("/construction/field-record")]
[HttpPost("/construction/fieldRecord")]
Run Code Online (Sandbox Code Playgroud)

然后使用以下操作过滤器

public class ExplicitObsoleteRoutes : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        if (context.ApiDescription.RelativePath.EndsWith("fieldRecord"))
        {
            operation.Deprecated = true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Ja9*_*35h 7

作为解决方法,您可以这样做

[SwaggerOperation("Update Records By Id")]
[Route("/construction/field-record")]
public async Task<IActionResult> UpdateRecord([FromBody] UpdateRecordRequest request)
{
   // code
}

[SwaggerOperation("Update Records By Id (Deprecated. Use '/construction/field-record')")]
[Route("/construction/fieldRecord")]
[Obsolete("Deprecated. Use 'UpdateRecord'")]
public async Task<IActionResult> UpdateRecordDeprecated([FromBody] UpdateRecordRequest request)
{
    return UpdateRecord(request);
}
Run Code Online (Sandbox Code Playgroud)