|
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,40 @@ 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 | + var parameters = operation.Parameters; |
| 493 | + if (parameters is null) |
| 494 | + { |
| 495 | + return null; |
| 496 | + } |
| 497 | + |
| 498 | + var modelNames = parameterInfo |
| 499 | + .GetCustomAttributes(inherit: false) |
| 500 | + .OfType<IModelNameProvider>() |
| 501 | + .Select(p => p.Name) |
| 502 | + .Append(parameterInfo.Name) |
| 503 | + .Where(n => !string.IsNullOrEmpty(n)) |
| 504 | + .ToHashSet(); |
| 505 | + |
| 506 | + foreach (var parameter in parameters) |
| 507 | + { |
| 508 | + var parameterName = parameter.Name; |
| 509 | + |
| 510 | + if (string.IsNullOrEmpty(parameterName)) |
| 511 | + { |
| 512 | + continue; |
| 513 | + } |
| 514 | + |
| 515 | + if (modelNames.Contains(parameterName)) |
| 516 | + { |
| 517 | + return parameter; |
| 518 | + } |
| 519 | + } |
| 520 | + |
| 521 | + return null; |
| 522 | + } |
| 523 | + |
484 | 524 | private static OpenApiParameter UnwrapOpenApiParameter(IOpenApiParameter sourceParameter) |
485 | 525 | { |
486 | 526 | if (sourceParameter is OpenApiParameterReference parameterReference) |
|
0 commit comments