[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}}) 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}}; 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, ErrorText = response.ErrorMessage,
Cookies = new List<Cookie>() Cookies = new List<Cookie>()

View File

@ -42,6 +42,11 @@ namespace {{packageName}}.Client
/// Gets or sets any cookies passed along on the response. /// Gets or sets any cookies passed along on the response.
/// </summary> /// </summary>
List<Cookie> Cookies { get; set; } List<Cookie> Cookies { get; set; }
/// <summary>
/// The raw content of this response
/// </summary>
string RawContent { get; }
} }
/// <summary> /// <summary>
@ -95,6 +100,11 @@ namespace {{packageName}}.Client
get { return Data; } get { return Data; }
} }
/// <summary>
/// The raw content
/// </summary>
public string RawContent { get;}
#endregion Properties #endregion Properties
#region Constructors #region Constructors
@ -105,11 +115,23 @@ namespace {{packageName}}.Client
/// <param name="statusCode">HTTP status code.</param> /// <param name="statusCode">HTTP status code.</param>
/// <param name="headers">HTTP headers.</param> /// <param name="headers">HTTP headers.</param>
/// <param name="data">Data (parsed HTTP body)</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; StatusCode = statusCode;
Headers = headers; Headers = headers;
Data = data; 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> /// <summary>
@ -117,10 +139,18 @@ namespace {{packageName}}.Client
/// </summary> /// </summary>
/// <param name="statusCode">HTTP status code.</param> /// <param name="statusCode">HTTP status code.</param>
/// <param name="data">Data (parsed HTTP body)</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 #endregion Constructors

View File

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

View File

@ -350,7 +350,9 @@ namespace Org.OpenAPITools.Client
private ApiResponse<T> toApiResponse<T>(IRestResponse<T> response) private ApiResponse<T> toApiResponse<T>(IRestResponse<T> response)
{ {
T result = response.Data; 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, ErrorText = response.ErrorMessage,
Cookies = new List<Cookie>() Cookies = new List<Cookie>()

View File

@ -51,6 +51,11 @@ namespace Org.OpenAPITools.Client
/// Gets or sets any cookies passed along on the response. /// Gets or sets any cookies passed along on the response.
/// </summary> /// </summary>
List<Cookie> Cookies { get; set; } List<Cookie> Cookies { get; set; }
/// <summary>
/// The raw content of this response
/// </summary>
string RawContent { get; }
} }
/// <summary> /// <summary>
@ -104,6 +109,11 @@ namespace Org.OpenAPITools.Client
get { return Data; } get { return Data; }
} }
/// <summary>
/// The raw content
/// </summary>
public string RawContent { get;}
#endregion Properties #endregion Properties
#region Constructors #region Constructors
@ -114,11 +124,23 @@ namespace Org.OpenAPITools.Client
/// <param name="statusCode">HTTP status code.</param> /// <param name="statusCode">HTTP status code.</param>
/// <param name="headers">HTTP headers.</param> /// <param name="headers">HTTP headers.</param>
/// <param name="data">Data (parsed HTTP body)</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; StatusCode = statusCode;
Headers = headers; Headers = headers;
Data = data; 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> /// <summary>
@ -126,10 +148,18 @@ namespace Org.OpenAPITools.Client
/// </summary> /// </summary>
/// <param name="statusCode">HTTP status code.</param> /// <param name="statusCode">HTTP status code.</param>
/// <param name="data">Data (parsed HTTP body)</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 #endregion Constructors

View File

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

View File

@ -351,7 +351,9 @@ namespace Org.OpenAPITools.Client
private ApiResponse<T> toApiResponse<T>(IRestResponse<T> response) private ApiResponse<T> toApiResponse<T>(IRestResponse<T> response)
{ {
T result = response.Data; 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, ErrorText = response.ErrorMessage,
Cookies = new List<Cookie>() Cookies = new List<Cookie>()

View File

@ -51,6 +51,11 @@ namespace Org.OpenAPITools.Client
/// Gets or sets any cookies passed along on the response. /// Gets or sets any cookies passed along on the response.
/// </summary> /// </summary>
List<Cookie> Cookies { get; set; } List<Cookie> Cookies { get; set; }
/// <summary>
/// The raw content of this response
/// </summary>
string RawContent { get; }
} }
/// <summary> /// <summary>
@ -104,6 +109,11 @@ namespace Org.OpenAPITools.Client
get { return Data; } get { return Data; }
} }
/// <summary>
/// The raw content
/// </summary>
public string RawContent { get;}
#endregion Properties #endregion Properties
#region Constructors #region Constructors
@ -114,11 +124,23 @@ namespace Org.OpenAPITools.Client
/// <param name="statusCode">HTTP status code.</param> /// <param name="statusCode">HTTP status code.</param>
/// <param name="headers">HTTP headers.</param> /// <param name="headers">HTTP headers.</param>
/// <param name="data">Data (parsed HTTP body)</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; StatusCode = statusCode;
Headers = headers; Headers = headers;
Data = data; 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> /// <summary>
@ -126,10 +148,18 @@ namespace Org.OpenAPITools.Client
/// </summary> /// </summary>
/// <param name="statusCode">HTTP status code.</param> /// <param name="statusCode">HTTP status code.</param>
/// <param name="data">Data (parsed HTTP body)</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 #endregion Constructors

View File

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