|
1 | | -//HintName: OpenApiXmlCommentSupport.generated.cs |
| 1 | +//HintName: OpenApiXmlCommentSupport.generated.cs |
2 | 2 | //------------------------------------------------------------------------------ |
3 | 3 | // <auto-generated> |
4 | 4 | // This code was generated by a tool. |
@@ -39,6 +39,7 @@ namespace Microsoft.AspNetCore.OpenApi.Generated |
39 | 39 | using System.Threading.Tasks; |
40 | 40 | using Microsoft.AspNetCore.OpenApi; |
41 | 41 | using Microsoft.AspNetCore.Mvc.Controllers; |
| 42 | + using Microsoft.AspNetCore.Mvc.ModelBinding; |
42 | 43 | using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata; |
43 | 44 | using Microsoft.Extensions.DependencyInjection; |
44 | 45 | using Microsoft.OpenApi; |
@@ -371,7 +372,12 @@ public Task TransformAsync(OpenApiOperation operation, OpenApiOperationTransform |
371 | 372 | foreach (var parameterComment in methodComment.Parameters) |
372 | 373 | { |
373 | 374 | var parameterInfo = methodInfo.GetParameters().SingleOrDefault(info => info.Name == parameterComment.Name); |
374 | | - var operationParameter = operation.Parameters?.SingleOrDefault(parameter => parameter.Name == parameterComment.Name); |
| 375 | + if (parameterInfo is null) |
| 376 | + { |
| 377 | + continue; |
| 378 | + } |
| 379 | + |
| 380 | + var operationParameter = GetOperationParameter(operation, parameterInfo); |
375 | 381 | if (operationParameter is not null) |
376 | 382 | { |
377 | 383 | var targetOperationParameter = UnwrapOpenApiParameter(operationParameter); |
@@ -481,6 +487,41 @@ public Task TransformAsync(OpenApiOperation operation, OpenApiOperationTransform |
481 | 487 | return Task.CompletedTask; |
482 | 488 | } |
483 | 489 |
|
| 490 | + private static IOpenApiParameter? GetOperationParameter(OpenApiOperation operation, ParameterInfo parameterInfo) |
| 491 | + { |
| 492 | + if (operation.Parameters is null) |
| 493 | + { |
| 494 | + return null; |
| 495 | + } |
| 496 | + |
| 497 | + var names = parameterInfo.GetCustomAttributes(inherit: false) |
| 498 | + .OfType<IModelNameProvider>() |
| 499 | + .Select(x => x.Name) |
| 500 | + .Append(parameterInfo.Name) |
| 501 | + .ToHashSet(); |
| 502 | + |
| 503 | + foreach (var operationParameter in operation.Parameters) |
| 504 | + { |
| 505 | + // Optimize for the most common case |
| 506 | + if (operationParameter.Name == parameterInfo.Name) |
| 507 | + { |
| 508 | + return operationParameter; |
| 509 | + } |
| 510 | + |
| 511 | + // Check all attributes implementing IModelNameProvider for custom names |
| 512 | + foreach (var modelNameProvider in parameterInfo.GetCustomAttributes(inherit: false).OfType<IModelNameProvider>()) |
| 513 | + { |
| 514 | + var modelName = modelNameProvider.Name; |
| 515 | + if (!string.IsNullOrEmpty(modelName) && operationParameter.Name == modelName) |
| 516 | + { |
| 517 | + return operationParameter; |
| 518 | + } |
| 519 | + } |
| 520 | + } |
| 521 | + |
| 522 | + return null; |
| 523 | + } |
| 524 | + |
484 | 525 | private static OpenApiParameter UnwrapOpenApiParameter(IOpenApiParameter sourceParameter) |
485 | 526 | { |
486 | 527 | if (sourceParameter is OpenApiParameterReference parameterReference) |
|
0 commit comments