Implement Stream and TextReader argument handling in HttpEndpointController.cs

master
Harald Wolff 2022-04-06 21:48:51 +02:00
parent a26c4e33b5
commit 7e1291815c
2 changed files with 37 additions and 8 deletions

View File

@ -92,8 +92,14 @@ namespace ln.http
} }
else if (_argumentSourceAttributes[n].ArgumentSource == HttpArgumentSource.CONTENT) else if (_argumentSourceAttributes[n].ArgumentSource == HttpArgumentSource.CONTENT)
{ {
if (httpContext.Request.Headers.TryGetValue("Content-Type", out string contentType) && if (_parameterInfos[n].ParameterType.Equals(typeof(Stream)))
contentType.Equals("application/json")) {
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()) using (TextReader reader = httpContext.Request.ContentStream.TextReader())
{ {
@ -135,11 +141,23 @@ namespace ln.http
private object InvokeMethod(HttpContext httpContext) private object InvokeMethod(HttpContext httpContext)
{ {
if (!TryApplyParameters(httpContext, out object[] parameters)) object[] parameters = null;
return HttpResponse.InternalServerError().Content("could not apply parameters"); try
else {
return MethodInfo.Invoke(EndpointController, parameters); 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 public class NonVoidEndpoint : MappedEndpoint
{ {
@ -182,7 +200,18 @@ namespace ln.http
return true; return true;
} }
} }
private void DisposeParameters(object[] parameters)
{
if (parameters is null)
return;
foreach (var o in parameters)
{
if (o is IDisposable disposable)
disposable.Dispose();
}
}
} }
} }

View File

@ -10,7 +10,7 @@
<Copyright>(c) 2020 Harald Wolff-Thobaben</Copyright> <Copyright>(c) 2020 Harald Wolff-Thobaben</Copyright>
<PackageTags>http server</PackageTags> <PackageTags>http server</PackageTags>
<LangVersion>9</LangVersion> <LangVersion>9</LangVersion>
<PackageVersion>0.6.0</PackageVersion> <PackageVersion>0.5.3</PackageVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>