Skip to content

Commit 37fdd7e

Browse files
committed
fix(openapi20): support formData
1 parent 8e0b357 commit 37fdd7e

4 files changed

Lines changed: 18 additions & 10 deletions

File tree

src/OpenAPI.WebApiGenerator/ApiGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ private static void GenerateCode(SourceProductionContext context, (
141141
{
142142
var contentGenerators = body.GetContent().Select(pair =>
143143
{
144-
var requestBodyContent = pair.Value;
145-
var schemaReference = openApiOperationVisitor.GetSchemaReference(requestBodyContent);
144+
var mediaType = pair.Value;
145+
var schemaReference = openApiOperationVisitor.GetSchemaReference(mediaType);
146146
var typeDeclaration = schemaGenerator.Generate(schemaReference);
147147
return new RequestBodyContentGenerator(
148148
pair.Key,

src/OpenAPI.WebApiGenerator/OpenApi/Visitor/V2/OpenApiV2Visitor.OperationVisitor.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ private sealed class OperationVisitor :
1515
private Dictionary<IOpenApiParameter, JsonReference> _parameterSchemaReferences = new();
1616
private JsonReference? _bodySchemaReference;
1717
private readonly Dictionary<IOpenApiResponse, IOpenApiResponseVisitor> _responseVisitors = new();
18-
18+
private JsonReference? _formDataSchemaReference;
19+
1920
private OperationVisitor(OpenApiReference<OpenApiOperation> openApiReference) : base(openApiReference)
2021
{
2122
VisitParameters();
@@ -36,6 +37,7 @@ private void VisitParameters()
3637
new JsonReference(Reference.Uri, parametersPointer.ToString().AsSpan())));
3738
_parameterSchemaReferences = parametersVisitor.Schemas;
3839
_bodySchemaReference = parametersVisitor.BodySchema;
40+
_formDataSchemaReference = parametersVisitor.FormData;
3941
}
4042

4143
private void VisitResponses()
@@ -58,8 +60,8 @@ internal static OperationVisitor Visit(
5860
public JsonReference GetSchemaReference(IOpenApiParameter parameter) =>
5961
_parameterSchemaReferences[parameter];
6062

61-
public JsonReference GetSchemaReference(IOpenApiMediaType requestBodyContent) =>
62-
_bodySchemaReference ?? throw new InvalidOperationException("Operation doesn't define a body");
63+
public JsonReference GetSchemaReference(IOpenApiMediaType mediaType) =>
64+
_bodySchemaReference ?? _formDataSchemaReference ?? throw new InvalidOperationException($"Operation {Pointer} doesn't define a body or formData");
6365

6466
public IOpenApiResponseVisitor Visit(IOpenApiResponse response) =>
6567
_responseVisitors[response];

src/OpenAPI.WebApiGenerator/OpenApi/Visitor/V2/OpenApiV2Visitor.ParametersVisitor.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ private ParametersVisitor(OpenApiReference<IList<IOpenApiParameter>> openApiRefe
1717

1818
internal Dictionary<IOpenApiParameter, JsonReference> Schemas { get; } = new();
1919
internal JsonReference? BodySchema { get; private set; }
20+
internal JsonReference? FormData { get; private set; }
2021

2122
internal static ParametersVisitor Visit(OpenApiReference<IList<IOpenApiParameter>> openApiReference) =>
2223
new(openApiReference);
@@ -45,11 +46,16 @@ private void VisitParameters()
4546

4647
parameters.Add((parameterName, parameterLocation),
4748
new JsonReference(Reference.Uri, schemaPointer.ToString().AsSpan()));
48-
if (parameterLocation == "body")
49+
switch (parameterLocation)
4950
{
50-
BodySchema = parameters[(parameterName, parameterLocation)];
51+
case "body":
52+
BodySchema = parameters[(parameterName, parameterLocation)];
53+
break;
54+
case "formData":
55+
FormData = parameters[(parameterName, parameterLocation)];
56+
break;
5157
}
52-
58+
5359
parameterIndex++;
5460
}
5561

src/OpenAPI.WebApiGenerator/OpenApi/Visitor/V3/OpenApiV3Visitor.OperationVisitor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ internal static OperationVisitor Visit(
7878
public JsonReference GetSchemaReference(IOpenApiParameter parameter) =>
7979
_parameterSchemaReferences[parameter];
8080

81-
public JsonReference GetSchemaReference(IOpenApiMediaType requestBodyContent) =>
82-
_requestContentSchemaReferences[requestBodyContent];
81+
public JsonReference GetSchemaReference(IOpenApiMediaType mediaType) =>
82+
_requestContentSchemaReferences[mediaType];
8383

8484
public IOpenApiResponseVisitor Visit(IOpenApiResponse response) =>
8585
_responseVisitors[response];

0 commit comments

Comments
 (0)