Implement Stream and TextReader argument handling in HttpEndpointController.cs
parent
a26c4e33b5
commit
7e1291815c
|
@ -92,8 +92,14 @@ namespace ln.http
|
|||
}
|
||||
else if (_argumentSourceAttributes[n].ArgumentSource == HttpArgumentSource.CONTENT)
|
||||
{
|
||||
if (httpContext.Request.Headers.TryGetValue("Content-Type", out string contentType) &&
|
||||
contentType.Equals("application/json"))
|
||||
if (_parameterInfos[n].ParameterType.Equals(typeof(Stream)))
|
||||
{
|
||||
parameters[n] = httpContext.Request.ContentStream;
|
||||
} else if (_parameterInfos[n].ParameterType.Equals(typeof(TextReader)))
|
||||
{
|
||||
parameters[n] = new StreamReader(httpContext.Request.ContentStream);
|
||||
} else if (httpContext.Request.Headers.TryGetValue("Content-Type", out string contentType) &&
|
||||
contentType.Equals("application/json"))
|
||||
{
|
||||
using (TextReader reader = httpContext.Request.ContentStream.TextReader())
|
||||
{
|
||||
|
@ -135,11 +141,23 @@ namespace ln.http
|
|||
|
||||
private object InvokeMethod(HttpContext httpContext)
|
||||
{
|
||||
if (!TryApplyParameters(httpContext, out object[] parameters))
|
||||
return HttpResponse.InternalServerError().Content("could not apply parameters");
|
||||
else
|
||||
return MethodInfo.Invoke(EndpointController, parameters);
|
||||
object[] parameters = null;
|
||||
try
|
||||
{
|
||||
if (!TryApplyParameters(httpContext, out parameters))
|
||||
return HttpResponse.InternalServerError().Content("could not apply parameters");
|
||||
else
|
||||
{
|
||||
return MethodInfo.Invoke(EndpointController, parameters);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
DisposeParameters(parameters);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class NonVoidEndpoint : MappedEndpoint
|
||||
{
|
||||
|
@ -182,7 +200,18 @@ namespace ln.http
|
|||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void DisposeParameters(object[] parameters)
|
||||
{
|
||||
if (parameters is null)
|
||||
return;
|
||||
|
||||
foreach (var o in parameters)
|
||||
{
|
||||
if (o is IDisposable disposable)
|
||||
disposable.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<Copyright>(c) 2020 Harald Wolff-Thobaben</Copyright>
|
||||
<PackageTags>http server</PackageTags>
|
||||
<LangVersion>9</LangVersion>
|
||||
<PackageVersion>0.6.0</PackageVersion>
|
||||
<PackageVersion>0.5.3</PackageVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
Loading…
Reference in New Issue