[csharp-netcore] Propagate raw content to the ApiException error content. (#4381)

* [csharp-netcore] Propagate raw content to the ApiException error content.
This commit is contained in:
Yurii Zhoholiev 2019-11-12 22:58:38 +02:00 committed by Jim Schubert
parent c663124ce3
commit 4494bf1e9a
9 changed files with 117 additions and 21 deletions

View File

@ -347,7 +347,9 @@ namespace {{packageName}}.Client
private ApiResponse<T> toApiResponse<T>({{#supportsAsync}}IRestResponse<T> response{{/supportsAsync}}{{^supportsAsync}}IRestResponse response, CustomJsonCodec des{{/supportsAsync}})
{
T result = {{#supportsAsync}}response.Data{{/supportsAsync}}{{^supportsAsync}}(T)des.Deserialize(response, typeof(T)){{/supportsAsync}};
var transformed = new ApiResponse<T>(response.StatusCode, new Multimap<string, string>({{#caseInsensitiveResponseHeaders}}StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}), result)
string rawContent = response.Content;
var transformed = new ApiResponse<T>(response.StatusCode, new Multimap<string, string>({{#caseInsensitiveResponseHeaders}}StringComparer.OrdinalIgnoreCase{{/caseInsensitiveResponseHeaders}}), result, rawContent)
{
ErrorText = response.ErrorMessage,
Cookies = new List<Cookie>()

View File

@ -42,6 +42,11 @@ namespace {{packageName}}.Client
/// Gets or sets any cookies passed along on the response.
/// </summary>
List<Cookie> Cookies { get; set; }
/// <summary>
/// The raw content of this response
/// </summary>
string RawContent { get; }
}
/// <summary>
@ -95,6 +100,11 @@ namespace {{packageName}}.Client
get { return Data; }
}
/// <summary>
/// The raw content
/// </summary>
public string RawContent { get;}
#endregion Properties
#region Constructors
@ -105,11 +115,23 @@ namespace {{packageName}}.Client
/// <param name="statusCode">HTTP status code.</param>
/// <param name="headers">HTTP headers.</param>
/// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(HttpStatusCode statusCode, Multimap<string, string> headers, T data)
/// <param name="rawContent">Raw content.</param>
public ApiResponse(HttpStatusCode statusCode, Multimap<string, string> headers, T data, string rawContent)
{
StatusCode = statusCode;
Headers = headers;
Data = data;
RawContent = rawContent;
}
/// <summary>
/// Initializes a new instance of the <see cref="ApiResponse{T}" /> class.
/// </summary>
/// <param name="statusCode">HTTP status code.</param>
/// <param name="headers">HTTP headers.</param>
/// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(HttpStatusCode statusCode, Multimap<string, string> headers, T data) : this(statusCode, headers, data, null)
{
}
/// <summary>
@ -117,10 +139,18 @@ namespace {{packageName}}.Client
/// </summary>
/// <param name="statusCode">HTTP status code.</param>
/// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(HttpStatusCode statusCode, T data)
/// <param name="rawContent">Raw content.</param>
public ApiResponse(HttpStatusCode statusCode, T data, string rawContent) : this(statusCode, null, data, rawContent)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="ApiResponse{T}" /> class.
/// </summary>
/// <param name="statusCode">HTTP status code.</param>
/// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(HttpStatusCode statusCode, T data) : this(statusCode, data, null)
{
StatusCode = statusCode;
Data = data;
}
#endregion Constructors

View File

@ -45,8 +45,8 @@ namespace {{packageName}}.Client
if (status >= 400)
{
return new ApiException(status,
string.Format("Error calling {0}: {1}", methodName, response.Content),
response.Content);
string.Format("Error calling {0}: {1}", methodName, response.RawContent),
response.RawContent);
}
{{^netStandard}}if (status == 0)
{

View File

@ -350,7 +350,9 @@ namespace Org.OpenAPITools.Client
private ApiResponse<T> toApiResponse<T>(IRestResponse<T> response)
{
T result = response.Data;
var transformed = new ApiResponse<T>(response.StatusCode, new Multimap<string, string>(), result)
string rawContent = response.Content;
var transformed = new ApiResponse<T>(response.StatusCode, new Multimap<string, string>(), result, rawContent)
{
ErrorText = response.ErrorMessage,
Cookies = new List<Cookie>()

View File

@ -51,6 +51,11 @@ namespace Org.OpenAPITools.Client
/// Gets or sets any cookies passed along on the response.
/// </summary>
List<Cookie> Cookies { get; set; }
/// <summary>
/// The raw content of this response
/// </summary>
string RawContent { get; }
}
/// <summary>
@ -104,6 +109,11 @@ namespace Org.OpenAPITools.Client
get { return Data; }
}
/// <summary>
/// The raw content
/// </summary>
public string RawContent { get;}
#endregion Properties
#region Constructors
@ -114,11 +124,23 @@ namespace Org.OpenAPITools.Client
/// <param name="statusCode">HTTP status code.</param>
/// <param name="headers">HTTP headers.</param>
/// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(HttpStatusCode statusCode, Multimap<string, string> headers, T data)
/// <param name="rawContent">Raw content.</param>
public ApiResponse(HttpStatusCode statusCode, Multimap<string, string> headers, T data, string rawContent)
{
StatusCode = statusCode;
Headers = headers;
Data = data;
RawContent = rawContent;
}
/// <summary>
/// Initializes a new instance of the <see cref="ApiResponse{T}" /> class.
/// </summary>
/// <param name="statusCode">HTTP status code.</param>
/// <param name="headers">HTTP headers.</param>
/// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(HttpStatusCode statusCode, Multimap<string, string> headers, T data) : this(statusCode, headers, data, null)
{
}
/// <summary>
@ -126,10 +148,18 @@ namespace Org.OpenAPITools.Client
/// </summary>
/// <param name="statusCode">HTTP status code.</param>
/// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(HttpStatusCode statusCode, T data)
/// <param name="rawContent">Raw content.</param>
public ApiResponse(HttpStatusCode statusCode, T data, string rawContent) : this(statusCode, null, data, rawContent)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="ApiResponse{T}" /> class.
/// </summary>
/// <param name="statusCode">HTTP status code.</param>
/// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(HttpStatusCode statusCode, T data) : this(statusCode, data, null)
{
StatusCode = statusCode;
Data = data;
}
#endregion Constructors

View File

@ -52,8 +52,8 @@ namespace Org.OpenAPITools.Client
if (status >= 400)
{
return new ApiException(status,
string.Format("Error calling {0}: {1}", methodName, response.Content),
response.Content);
string.Format("Error calling {0}: {1}", methodName, response.RawContent),
response.RawContent);
}
return null;

View File

@ -351,7 +351,9 @@ namespace Org.OpenAPITools.Client
private ApiResponse<T> toApiResponse<T>(IRestResponse<T> response)
{
T result = response.Data;
var transformed = new ApiResponse<T>(response.StatusCode, new Multimap<string, string>(), result)
string rawContent = response.Content;
var transformed = new ApiResponse<T>(response.StatusCode, new Multimap<string, string>(), result, rawContent)
{
ErrorText = response.ErrorMessage,
Cookies = new List<Cookie>()

View File

@ -51,6 +51,11 @@ namespace Org.OpenAPITools.Client
/// Gets or sets any cookies passed along on the response.
/// </summary>
List<Cookie> Cookies { get; set; }
/// <summary>
/// The raw content of this response
/// </summary>
string RawContent { get; }
}
/// <summary>
@ -104,6 +109,11 @@ namespace Org.OpenAPITools.Client
get { return Data; }
}
/// <summary>
/// The raw content
/// </summary>
public string RawContent { get;}
#endregion Properties
#region Constructors
@ -114,11 +124,23 @@ namespace Org.OpenAPITools.Client
/// <param name="statusCode">HTTP status code.</param>
/// <param name="headers">HTTP headers.</param>
/// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(HttpStatusCode statusCode, Multimap<string, string> headers, T data)
/// <param name="rawContent">Raw content.</param>
public ApiResponse(HttpStatusCode statusCode, Multimap<string, string> headers, T data, string rawContent)
{
StatusCode = statusCode;
Headers = headers;
Data = data;
RawContent = rawContent;
}
/// <summary>
/// Initializes a new instance of the <see cref="ApiResponse{T}" /> class.
/// </summary>
/// <param name="statusCode">HTTP status code.</param>
/// <param name="headers">HTTP headers.</param>
/// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(HttpStatusCode statusCode, Multimap<string, string> headers, T data) : this(statusCode, headers, data, null)
{
}
/// <summary>
@ -126,10 +148,18 @@ namespace Org.OpenAPITools.Client
/// </summary>
/// <param name="statusCode">HTTP status code.</param>
/// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(HttpStatusCode statusCode, T data)
/// <param name="rawContent">Raw content.</param>
public ApiResponse(HttpStatusCode statusCode, T data, string rawContent) : this(statusCode, null, data, rawContent)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="ApiResponse{T}" /> class.
/// </summary>
/// <param name="statusCode">HTTP status code.</param>
/// <param name="data">Data (parsed HTTP body)</param>
public ApiResponse(HttpStatusCode statusCode, T data) : this(statusCode, data, null)
{
StatusCode = statusCode;
Data = data;
}
#endregion Constructors

View File

@ -52,8 +52,8 @@ namespace Org.OpenAPITools.Client
if (status >= 400)
{
return new ApiException(status,
string.Format("Error calling {0}: {1}", methodName, response.Content),
response.Content);
string.Format("Error calling {0}: {1}", methodName, response.RawContent),
response.RawContent);
}
if (status == 0)
{