Json 通用类型的模式 $ref 名称随 Swagger 和 OpenApi 更改
Json schema $ref name for generic type changed with Swagger and OpenApi
我正在将我的 .NET Core 项目从 2.2 升级到 3.1...
同时我还更新了 Swagger 版本,它现在基于 OpenApi。我从 Swagger 获得的 API 的 .json 架构更改了我的自定义泛型类型的 $ref 名称。我在很多回复中使用了这些类型。
不知道是OpenApi规范的问题,还是我配置不对
这是我的控制器方法的一个例子:
/// <summary>
/// Gets recording sets by search settings.
/// </summary>
/// <response code="200">The recording sets were returned correctly.</response>
/// <response code="401">The unauthorized access.</response>
/// <response code="406">The not acceptable format.</response>
/// <response code="415">The unsupported media type.</response>
/// <response code="500">The unexpected error.</response>
/// <param name="recordingSetSearchSettings">The search settings of the recording set.</param>
/// <returns>The found recording sets.</returns>
[HttpGet]
[ProducesResponseType(typeof(IDataPage<RecordingSet>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(void), StatusCodes.Status401Unauthorized)]
[ProducesResponseType(typeof(void), StatusCodes.Status406NotAcceptable)]
[ProducesResponseType(typeof(void), StatusCodes.Status415UnsupportedMediaType)]
[ProducesResponseType(typeof(ApiErrorSummary), StatusCodes.Status500InternalServerError)]
[SwaggerOperation(OperationId = "SearchRecordingSets")]
public IDataPage<RecordingSet> Get([FromQuery(Name = "")] RecordingSetSearchSettings recordingSetSearchSettings)
{
return recordingSetService.Search(recordingSetSearchSettings);
}
注意 ProducesResponseType
中的 IDataPage<RecordingSet>
这是我在 .json 中的 $ref 名称过去的样子:IDataPage[RecordingSet]
(我想保留这个,因为我使用自定义 NSwag .exe 为 FrontEnd 生成客户端方法)
.json 中的 $ref 名称现在是这样的:RecordingSetIDataPage
这是配置问题,还是规范发生了变化,所以我必须实施一些自定义方法才能支持它?
我在 Swashbuckle 上找到了相应的答案 github - https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1803
约定已更改,您可以使用旧方法,定义 TypeExtension
- FriendlyId
并在 CustomSchemaIds
中使用它
services.AddSwaggerGen(c =>
{
// ... your definitions ...
c.CustomSchemaIds(i => i.FriendlyId());
});
我正在将我的 .NET Core 项目从 2.2 升级到 3.1...
同时我还更新了 Swagger 版本,它现在基于 OpenApi。我从 Swagger 获得的 API 的 .json 架构更改了我的自定义泛型类型的 $ref 名称。我在很多回复中使用了这些类型。
不知道是OpenApi规范的问题,还是我配置不对
这是我的控制器方法的一个例子:
/// <summary>
/// Gets recording sets by search settings.
/// </summary>
/// <response code="200">The recording sets were returned correctly.</response>
/// <response code="401">The unauthorized access.</response>
/// <response code="406">The not acceptable format.</response>
/// <response code="415">The unsupported media type.</response>
/// <response code="500">The unexpected error.</response>
/// <param name="recordingSetSearchSettings">The search settings of the recording set.</param>
/// <returns>The found recording sets.</returns>
[HttpGet]
[ProducesResponseType(typeof(IDataPage<RecordingSet>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(void), StatusCodes.Status401Unauthorized)]
[ProducesResponseType(typeof(void), StatusCodes.Status406NotAcceptable)]
[ProducesResponseType(typeof(void), StatusCodes.Status415UnsupportedMediaType)]
[ProducesResponseType(typeof(ApiErrorSummary), StatusCodes.Status500InternalServerError)]
[SwaggerOperation(OperationId = "SearchRecordingSets")]
public IDataPage<RecordingSet> Get([FromQuery(Name = "")] RecordingSetSearchSettings recordingSetSearchSettings)
{
return recordingSetService.Search(recordingSetSearchSettings);
}
注意 ProducesResponseType
IDataPage<RecordingSet>
这是我在 .json 中的 $ref 名称过去的样子:IDataPage[RecordingSet]
(我想保留这个,因为我使用自定义 NSwag .exe 为 FrontEnd 生成客户端方法)
.json 中的 $ref 名称现在是这样的:RecordingSetIDataPage
这是配置问题,还是规范发生了变化,所以我必须实施一些自定义方法才能支持它?
我在 Swashbuckle 上找到了相应的答案 github - https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1803
约定已更改,您可以使用旧方法,定义 TypeExtension
- FriendlyId
并在 CustomSchemaIds
services.AddSwaggerGen(c =>
{
// ... your definitions ...
c.CustomSchemaIds(i => i.FriendlyId());
});