@@ -101,6 +101,8 @@ private static void PopulateMetadataForParameter<T>(ParameterInfo parameter, End
101
101
private static async ValueTask<(bool, T?)> TryResolveBodyAsync<T>(HttpContext httpContext, LogOrThrowExceptionHelper logOrThrowExceptionHelper, bool allowEmpty, string parameterTypeName, string parameterName, bool isInferred = false)
102
102
{
103
103
var feature = httpContext.Features.Get<Microsoft.AspNetCore.Http.Features.IHttpRequestBodyDetectionFeature>();
104
+ T? bodyValue = default;
105
+ var bodyValueSet = false;
104
106
105
107
if (feature?.CanHaveBody == true)
106
108
{
@@ -112,21 +114,8 @@ private static void PopulateMetadataForParameter<T>(ParameterInfo parameter, End
112
114
}
113
115
try
114
116
{
115
- var bodyValue = await httpContext.Request.ReadFromJsonAsync<T>();
116
- if (!allowEmpty && bodyValue == null)
117
- {
118
- if (!isInferred)
119
- {
120
- logOrThrowExceptionHelper.RequiredParameterNotProvided(parameterTypeName, parameterName, "body");
121
- }
122
- else
123
- {
124
- logOrThrowExceptionHelper.ImplicitBodyNotProvided(parameterName);
125
- }
126
- httpContext.Response.StatusCode = StatusCodes.Status400BadRequest;
127
- return (false, bodyValue);
128
- }
129
- return (true, bodyValue);
117
+ bodyValue = await httpContext.Request.ReadFromJsonAsync<T>();
118
+ bodyValueSet = bodyValue != null;
130
119
}
131
120
catch (BadHttpRequestException badHttpRequestException)
132
121
{
@@ -147,12 +136,22 @@ private static void PopulateMetadataForParameter<T>(ParameterInfo parameter, End
147
136
return (false, default);
148
137
}
149
138
}
150
- else if (!allowEmpty)
139
+
140
+ if (!allowEmpty && !bodyValueSet)
151
141
{
142
+ if (!isInferred)
143
+ {
144
+ logOrThrowExceptionHelper.RequiredParameterNotProvided(parameterTypeName, parameterName, "body");
145
+ }
146
+ else
147
+ {
148
+ logOrThrowExceptionHelper.ImplicitBodyNotProvided(parameterName);
149
+ }
152
150
httpContext.Response.StatusCode = StatusCodes.Status400BadRequest;
151
+ return (false, bodyValue);
153
152
}
154
153
155
- return (allowEmpty, default );
154
+ return (true, bodyValue );
156
155
}
157
156
""" ;
158
157
0 commit comments