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)
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue