目前,如果您使用以下
c.CustomOperationIds(apiDesc =>
{
return apiDesc.TryGetMethodInfo(out MethodInfo methodInfo) ? methodInfo.Name : null;
});
而且,由于程序员的错误,你有两个同名的方法,你没有被警告说你违反了OpenAPI规范。
有什么方法可以添加一个检查?
我在想,要么
谢谢你的时间
P.S : 使用Swashbuckle.AspNetCore.SwaggerGen 5.3.1。
经过多次尝试,我找到了一个变通方法:使用一个操作过滤器,如果OperationId已经被使用,它将抛出一个异常。
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System;
using System.Collections.Generic;
namespace Service.Utils
{
/// <summary>
/// Guarantee that OperationId is not already used
/// </summary>
public class SwaggerUniqueOperationId : IOperationFilter
{
private readonly HashSet<string> ids = new HashSet<string>();
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (operation.OperationId != null)
{
if (ids.Contains(operation.OperationId))
throw new NotSupportedException($"There are 2 operations with same OperationId {operation.OperationId}");
ids.Add(operation.OperationId);
}
}
}
}
这一点也不理想,因为错误信息非常模糊,而且是一个运行时错误,但这比提供一个违反这个唯一OperationId约束的OpenApi规范要好......。