Skip to content

Commit

Permalink
Merge pull request #417 from wpbrown/master
Browse files Browse the repository at this point in the history
Use context specific storage for param parsing
  • Loading branch information
darrelmiller authored Sep 15, 2019
2 parents 9c83df3 + c86d29b commit 578e587
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 7 deletions.
13 changes: 6 additions & 7 deletions src/Microsoft.OpenApi.Readers/V2/OpenApiParameterDeserializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ namespace Microsoft.OpenApi.Readers.V2
/// </summary>
internal static partial class OpenApiV2Deserializer
{
private static bool _isBodyOrFormData;

private static readonly FixedFieldMap<OpenApiParameter> _parameterFixedFields =
new FixedFieldMap<OpenApiParameter>
{
Expand Down Expand Up @@ -232,11 +230,11 @@ private static void ProcessIn(OpenApiParameter o, ParseNode n)
switch (value)
{
case "body":
_isBodyOrFormData = true;
n.Context.SetTempStorage(TempStorageKeys.ParameterIsBodyOrFormData, true);
n.Context.SetTempStorage(TempStorageKeys.BodyParameter, o);
break;
case "formData":
_isBodyOrFormData = true;
n.Context.SetTempStorage(TempStorageKeys.ParameterIsBodyOrFormData, true);
var formParameters = n.Context.GetFromTempStorage<List<OpenApiParameter>>("formParameters");
if (formParameters == null)
{
Expand Down Expand Up @@ -265,7 +263,7 @@ public static OpenApiParameter LoadParameter(ParseNode node)
public static OpenApiParameter LoadParameter(ParseNode node, bool loadRequestBody)
{
// Reset the local variables every time this method is called.
_isBodyOrFormData = false;
node.Context.SetTempStorage(TempStorageKeys.ParameterIsBodyOrFormData, false);

var mapNode = node.CheckMapNode("parameter");

Expand All @@ -290,12 +288,13 @@ public static OpenApiParameter LoadParameter(ParseNode node, bool loadRequestBod
node.Context.SetTempStorage("schema", null);
}

if (_isBodyOrFormData && !loadRequestBody)
bool isBodyOrFormData = (bool)node.Context.GetFromTempStorage<object>(TempStorageKeys.ParameterIsBodyOrFormData);
if (isBodyOrFormData && !loadRequestBody)
{
return null; // Don't include Form or Body parameters when normal parameters are loaded.
}

if (loadRequestBody && !_isBodyOrFormData)
if (loadRequestBody && !isBodyOrFormData)
{
return null; // Don't include non-Body or non-Form parameters when request bodies are loaded.
}
Expand Down
1 change: 1 addition & 0 deletions src/Microsoft.OpenApi.Readers/V2/TempStorageKeys.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ internal static class TempStorageKeys
public const string OperationConsumes = "operationConsumes";
public const string GlobalConsumes = "globalConsumes";
public const string GlobalProduces = "globalProduces";
public const string ParameterIsBodyOrFormData = "parameterIsBodyOrFormData";
}
}

0 comments on commit 578e587

Please sign in to comment.