diff --git a/ln.http/HttpEndpointController.cs b/ln.http/HttpEndpointController.cs
index b251f43..c31742a 100644
--- a/ln.http/HttpEndpointController.cs
+++ b/ln.http/HttpEndpointController.cs
@@ -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();
+ }
+ }
}
}
diff --git a/ln.http/ln.http.csproj b/ln.http/ln.http.csproj
index 60ef035..7936a67 100644
--- a/ln.http/ln.http.csproj
+++ b/ln.http/ln.http.csproj
@@ -10,7 +10,7 @@
(c) 2020 Harald Wolff-Thobaben
http server
9
- 0.6.0
+ 0.5.3