Bumped package version to 1.4.7. Added support for Stream requests and MemoryStream responses.
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
<AssemblyName>MontoyaTech.Rest.Net</AssemblyName>
|
||||
<RootNamespace>MontoyaTech.Rest.Net</RootNamespace>
|
||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||
<Version>1.4.6</Version>
|
||||
<Version>1.4.7</Version>
|
||||
<PackageReleaseNotes></PackageReleaseNotes>
|
||||
<PackageIcon>Logo_Symbol_Black_Outline.png</PackageIcon>
|
||||
</PropertyGroup>
|
||||
|
@@ -3,8 +3,10 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
using System.IO.Pipes;
|
||||
|
||||
namespace MontoyaTech.Rest.Net
|
||||
{
|
||||
@@ -413,10 +415,20 @@ namespace MontoyaTech.Rest.Net
|
||||
//Add the request content if any.
|
||||
if (routeRequest != null)
|
||||
{
|
||||
if (routeRequest.Json)
|
||||
if (routeRequest.RequestType.IsAssignableTo(typeof(Stream)))
|
||||
{
|
||||
writer.WriteBreak().WriteLine("request.Seek(0, System.IO.SeekOrigin.Begin);");
|
||||
|
||||
writer.WriteBreak().WriteLine("message.Content = new StreamContent(request);");
|
||||
}
|
||||
else if (routeRequest.Json)
|
||||
{
|
||||
writer.WriteBreak().WriteLine("message.Content = new StringContent(JsonConvert.SerializeObject(request));");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WriteBreak().WriteLine("message.Content = new StringContent(request.ToString());");
|
||||
}
|
||||
}
|
||||
|
||||
//Generate the response code
|
||||
@@ -430,80 +442,93 @@ namespace MontoyaTech.Rest.Net
|
||||
{
|
||||
writer.WriteBreak().WriteLine("if (response.IsSuccessStatusCode)").WriteLine("{").Indent();
|
||||
|
||||
writer.WriteBreak().WriteLine("var content = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();");
|
||||
|
||||
writer.WriteBreak().WriteLine("if (string.IsNullOrEmpty(content))").Indent().WriteLine("return default;").Outdent();
|
||||
|
||||
if (routeResponse.Json)
|
||||
if (routeResponse.ResponseType.IsEquivalentTo(typeof(MemoryStream)))
|
||||
{
|
||||
writer.WriteBreak().WriteLine($"return JsonConvert.DeserializeObject<{this.GetTypeFullyResolvedName(routeResponse.ResponseType)}>(content);");
|
||||
writer.WriteBreak().WriteLine($"var stream = new {this.GetTypeFullyResolvedName(routeResponse.ResponseType)}();");
|
||||
|
||||
writer.WriteBreak().WriteLine("response.Content.ReadAsStream().CopyTo(stream);");
|
||||
|
||||
writer.WriteBreak().WriteLine("stream.Seek(0, System.IO.SeekOrigin.Begin);");
|
||||
|
||||
writer.WriteBreak().WriteLine("return stream;");
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (Type.GetTypeCode(routeResponse.ResponseType))
|
||||
writer.WriteBreak().WriteLine("var content = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();");
|
||||
|
||||
writer.WriteBreak().WriteLine("if (string.IsNullOrEmpty(content))").Indent().WriteLine("return default;").Outdent();
|
||||
|
||||
if (routeResponse.Json)
|
||||
{
|
||||
case TypeCode.Boolean:
|
||||
writer.WriteBreak().WriteLine("return bool.Parse(content);");
|
||||
break;
|
||||
writer.WriteBreak().WriteLine($"return JsonConvert.DeserializeObject<{this.GetTypeFullyResolvedName(routeResponse.ResponseType)}>(content);");
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (Type.GetTypeCode(routeResponse.ResponseType))
|
||||
{
|
||||
case TypeCode.Boolean:
|
||||
writer.WriteBreak().WriteLine("return bool.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.Byte:
|
||||
writer.WriteBreak().WriteLine("return byte.Parse(content);");
|
||||
break;
|
||||
case TypeCode.Byte:
|
||||
writer.WriteBreak().WriteLine("return byte.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.Char:
|
||||
writer.WriteBreak().WriteLine("return content[0];");
|
||||
break;
|
||||
case TypeCode.Char:
|
||||
writer.WriteBreak().WriteLine("return content[0];");
|
||||
break;
|
||||
|
||||
case TypeCode.DateTime:
|
||||
writer.WriteBreak().WriteLine("return DateTime.Parse(content);");
|
||||
break;
|
||||
case TypeCode.DateTime:
|
||||
writer.WriteBreak().WriteLine("return DateTime.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.Decimal:
|
||||
writer.WriteBreak().WriteLine("return decimal.Parse(content);");
|
||||
break;
|
||||
case TypeCode.Decimal:
|
||||
writer.WriteBreak().WriteLine("return decimal.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.Double:
|
||||
writer.WriteBreak().WriteLine("return double.Parse(content);");
|
||||
break;
|
||||
case TypeCode.Double:
|
||||
writer.WriteBreak().WriteLine("return double.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.Int16:
|
||||
writer.WriteBreak().WriteLine("return short.Parse(content);");
|
||||
break;
|
||||
case TypeCode.Int16:
|
||||
writer.WriteBreak().WriteLine("return short.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.Int32:
|
||||
writer.WriteBreak().WriteLine("return int.Parse(content);");
|
||||
break;
|
||||
case TypeCode.Int32:
|
||||
writer.WriteBreak().WriteLine("return int.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.Int64:
|
||||
writer.WriteBreak().WriteLine("return long.Parse(content);");
|
||||
break;
|
||||
case TypeCode.Int64:
|
||||
writer.WriteBreak().WriteLine("return long.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.SByte:
|
||||
writer.WriteBreak().WriteLine("return sbyte.Parse(content);");
|
||||
break;
|
||||
case TypeCode.SByte:
|
||||
writer.WriteBreak().WriteLine("return sbyte.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.Single:
|
||||
writer.WriteBreak().WriteLine("return float.Parse(content);");
|
||||
break;
|
||||
case TypeCode.Single:
|
||||
writer.WriteBreak().WriteLine("return float.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.String:
|
||||
writer.WriteBreak().WriteLine("return content;");
|
||||
break;
|
||||
case TypeCode.String:
|
||||
writer.WriteBreak().WriteLine("return content;");
|
||||
break;
|
||||
|
||||
case TypeCode.UInt16:
|
||||
writer.WriteBreak().WriteLine("return ushort.Parse(content);");
|
||||
break;
|
||||
case TypeCode.UInt16:
|
||||
writer.WriteBreak().WriteLine("return ushort.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.UInt32:
|
||||
writer.WriteBreak().WriteLine("return uint.Parse(content);");
|
||||
break;
|
||||
case TypeCode.UInt32:
|
||||
writer.WriteBreak().WriteLine("return uint.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.UInt64:
|
||||
writer.WriteBreak().WriteLine("return ulong.Parse(content);");
|
||||
break;
|
||||
case TypeCode.UInt64:
|
||||
writer.WriteBreak().WriteLine("return ulong.Parse(content);");
|
||||
break;
|
||||
|
||||
case TypeCode.Object:
|
||||
throw new NotSupportedException("ResponseType isn't JSON but is an object.");
|
||||
case TypeCode.Object:
|
||||
throw new NotSupportedException("ResponseType isn't JSON but is an object.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user