ОБНОВЛЕНИЕ: Похоже, что именно Newtonsoft SnakeCaseNamingStrategy
вызвал эту проблему с XML комментариями. Есть ли способ получить эту стратегию именования, чтобы получить правильные XML комментарии для свойств с несколькими словами в их названии? XML комментариев не найдено для свойств модели с добавлением символов подчеркивания.
Я пытаюсь задокументировать API, но соглашения строки запроса, используемые MVC, не соблюдаются от Swashbuckle / Swagger.
Я сейчас заменяю. NET По умолчанию Core QueryStringValueProviderFactory
на SnakeCaseQueryStringValueProviderFactory
для преобразования всех строк запроса в Snake Case
, как показано ниже.
services
.AddMvc(options =>
{
var factory = options.ValueProviderFactories.FirstOrDefault(f => f is QueryStringValueProviderFactory);
var index = options.ValueProviderFactories.IndexOf(factory);
if (index > -1)
{
options.ValueProviderFactories[index] = new SnakeCaseQueryStringValueProviderFactory();
}
else
{
options.ValueProviderFactories.Add(new SnakeCaseQueryStringValueProviderFactory());
}
});
Если я AddSwaggerGen
, строки запроса будут в Pascal Case
вместо Snake Case
в документации по умолчанию, что неверно.
Я попытался исправить это на уровне ApiExplorer
, определив ApiDescriptionProvider
like:
public sealed class SnakeCaseApiDescriptionProvider : IApiDescriptionProvider
{
public int Order => 20390239;
public void OnProvidersExecuted(ApiDescriptionProviderContext context)
{
}
public void OnProvidersExecuting(ApiDescriptionProviderContext context)
{
foreach (var parameter in context.Results.SelectMany(x => x.ParameterDescriptions).Where(x => x.Source.Id == "Query" || x.Source.Id == "Path"))
{
parameter.Name = parameter.Name.ToSnakeCase();
}
}
}
Который был зарегистрирован на Startup
like:
services
.TryAddEnumerable(ServiceDescriptor.Transient<IApiDescriptionProvider, SnakeCaseApiDescriptionProvider>());
Однако это нарушает комментарии XML для любых свойств с несколькими словами в имени. Я предполагаю, что это потому, что имя параметра больше не соответствует имени в файле XML.
Например, эта модель:
public class Address
{
/// <summary>
/// Address 1.
/// </summary>
public string Address1 { get; set; }
/// <summary>
/// Address 2.
/// </summary>
public string Address2 { get; set; }
/// <summary>
/// City.
/// </summary>
public string City { get; set; }
/// <summary>
/// State.
/// </summary>
public string State { get; set; }
/// <summary>
/// Post Code
/// </summary>
public string PostCode { get; set; }
/// <summary>
/// Country.
/// </summary>
public string Country { get; set; }
}
Создает эту документацию в Swagger:
PostCode
отсутствует его XML комментариев, поскольку имя было изменено на post_code
.
- Есть ли способ заставить Swashbuckle сгенерировать свою документацию после того, как
SnakeCaseQueryStringValueProviderFactory
сделал свое дело? - Или есть способ исправить
SnakeCaseApiDescriptionProvider
, чтобы по-прежнему находить комментарии XML для любых параметров, измененных на Snake Case
? - Или есть другой способ сделать это, о котором я не знаю без этих проблем?
Спасибо.