forked from loafle/openapi-generator-original
[C#] Use RestSharp's mechanism for path parameters in URL templates
Previously, a simple find-and-replace had been used to substitute path parameters into the path. Among other omissions, this resulted in special characters such as `/` being left unescaped. The RestSharp request object, as it turns out, expects a path template in the same format as provided by Swagger (with param names in braces), to be filled in using `AddParameter()`. In this edit, the code now uses this mechanism. The form parameter values are now passed to `CallApi*()` as a `Dictionary<String, String>`, where they are added to the request before submission. Since this was already how query and form parameters (etc.) were implemented, the resulting code is more consistent with itself than before.
This commit is contained in:
parent
aba755d3de
commit
4b896c759c
@ -38,16 +38,16 @@ namespace {{packageName}}.Client {
|
|||||||
private Dictionary<String, String> defaultHeaderMap = new Dictionary<String, String>();
|
private Dictionary<String, String> defaultHeaderMap = new Dictionary<String, String>();
|
||||||
|
|
||||||
public Object CallApi(String Path, RestSharp.Method Method, Dictionary<String, String> QueryParams, String PostBody,
|
public Object CallApi(String Path, RestSharp.Method Method, Dictionary<String, String> QueryParams, String PostBody,
|
||||||
Dictionary<String, String> HeaderParams, Dictionary<String, String> FormParams, Dictionary<String, String> FileParams, String[] AuthSettings) {
|
Dictionary<String, String> HeaderParams, Dictionary<String, String> FormParams, Dictionary<String, String> FileParams, Dictionary<String, String> PathParams, String[] AuthSettings) {
|
||||||
var response = Task.Run(async () => {
|
var response = Task.Run(async () => {
|
||||||
var resp = await CallApiAsync(Path, Method, QueryParams, PostBody, HeaderParams, FormParams, FileParams, AuthSettings);
|
var resp = await CallApiAsync(Path, Method, QueryParams, PostBody, HeaderParams, FormParams, FileParams, PathParams, AuthSettings);
|
||||||
return resp;
|
return resp;
|
||||||
});
|
});
|
||||||
return response.Result;
|
return response.Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Object> CallApiAsync(String Path, RestSharp.Method Method, Dictionary<String, String> QueryParams, String PostBody,
|
public async Task<Object> CallApiAsync(String Path, RestSharp.Method Method, Dictionary<String, String> QueryParams, String PostBody,
|
||||||
Dictionary<String, String> HeaderParams, Dictionary<String, String> FormParams, Dictionary<String, String> FileParams, String[] AuthSettings) {
|
Dictionary<String, String> HeaderParams, Dictionary<String, String> FormParams, Dictionary<String, String> FileParams, Dictionary<String, String> PathParams, String[] AuthSettings) {
|
||||||
|
|
||||||
var request = new RestRequest(Path, Method);
|
var request = new RestRequest(Path, Method);
|
||||||
|
|
||||||
@ -57,6 +57,10 @@ namespace {{packageName}}.Client {
|
|||||||
foreach(KeyValuePair<string, string> defaultHeader in this.defaultHeaderMap)
|
foreach(KeyValuePair<string, string> defaultHeader in this.defaultHeaderMap)
|
||||||
request.AddHeader(defaultHeader.Key, defaultHeader.Value);
|
request.AddHeader(defaultHeader.Key, defaultHeader.Value);
|
||||||
|
|
||||||
|
// add path parameter, if any
|
||||||
|
foreach(KeyValuePair<string, string> param in PathParams)
|
||||||
|
request.AddParameter(param.Key, param.Value, ParameterType.UrlSegment);
|
||||||
|
|
||||||
// add header parameter, if any
|
// add header parameter, if any
|
||||||
foreach(KeyValuePair<string, string> param in HeaderParams)
|
foreach(KeyValuePair<string, string> param in HeaderParams)
|
||||||
request.AddHeader(param.Key, param.Value);
|
request.AddHeader(param.Key, param.Value);
|
||||||
|
@ -92,16 +92,18 @@ namespace {{packageName}}.Api {
|
|||||||
{{/required}}{{/allParams}}
|
{{/required}}{{/allParams}}
|
||||||
|
|
||||||
var path = "{{path}}";
|
var path = "{{path}}";
|
||||||
path = path.Replace("{format}", "json");
|
|
||||||
{{#pathParams}}path = path.Replace("{" + "{{baseName}}" + "}", apiClient.ParameterToString({{{paramName}}}));
|
|
||||||
{{/pathParams}}
|
|
||||||
|
|
||||||
|
var pathParams = new Dictionary<String, String>();
|
||||||
var queryParams = new Dictionary<String, String>();
|
var queryParams = new Dictionary<String, String>();
|
||||||
var headerParams = new Dictionary<String, String>();
|
var headerParams = new Dictionary<String, String>();
|
||||||
var formParams = new Dictionary<String, String>();
|
var formParams = new Dictionary<String, String>();
|
||||||
var fileParams = new Dictionary<String, String>();
|
var fileParams = new Dictionary<String, String>();
|
||||||
String postBody = null;
|
String postBody = null;
|
||||||
|
|
||||||
|
pathParams.Add("format", "json");
|
||||||
|
{{#pathParams}} if ({{paramName}} != null) pathParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // path parameter
|
||||||
|
{{/pathParams}}
|
||||||
|
|
||||||
{{#queryParams}} if ({{paramName}} != null) queryParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // query parameter
|
{{#queryParams}} if ({{paramName}} != null) queryParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // query parameter
|
||||||
{{/queryParams}}
|
{{/queryParams}}
|
||||||
{{#headerParams}} if ({{paramName}} != null) headerParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // header parameter
|
{{#headerParams}} if ({{paramName}} != null) headerParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // header parameter
|
||||||
@ -115,7 +117,7 @@ namespace {{packageName}}.Api {
|
|||||||
String[] authSettings = new String[] { {{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}} };
|
String[] authSettings = new String[] { {{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}} };
|
||||||
|
|
||||||
// make the HTTP request
|
// make the HTTP request
|
||||||
IRestResponse response = (IRestResponse) apiClient.CallApi(path, Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
|
IRestResponse response = (IRestResponse) apiClient.CallApi(path, Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings);
|
||||||
|
|
||||||
if (((int)response.StatusCode) >= 400) {
|
if (((int)response.StatusCode) >= 400) {
|
||||||
throw new ApiException ((int)response.StatusCode, "Error calling {{nickname}}: " + response.Content, response.Content);
|
throw new ApiException ((int)response.StatusCode, "Error calling {{nickname}}: " + response.Content, response.Content);
|
||||||
@ -137,16 +139,18 @@ namespace {{packageName}}.Api {
|
|||||||
{{/required}}{{/allParams}}
|
{{/required}}{{/allParams}}
|
||||||
|
|
||||||
var path = "{{path}}";
|
var path = "{{path}}";
|
||||||
path = path.Replace("{format}", "json");
|
|
||||||
{{#pathParams}}path = path.Replace("{" + "{{baseName}}" + "}", apiClient.ParameterToString({{{paramName}}}));
|
|
||||||
{{/pathParams}}
|
|
||||||
|
|
||||||
|
var pathParams = new Dictionary<String, String>();
|
||||||
var queryParams = new Dictionary<String, String>();
|
var queryParams = new Dictionary<String, String>();
|
||||||
var headerParams = new Dictionary<String, String>();
|
var headerParams = new Dictionary<String, String>();
|
||||||
var formParams = new Dictionary<String, String>();
|
var formParams = new Dictionary<String, String>();
|
||||||
var fileParams = new Dictionary<String, String>();
|
var fileParams = new Dictionary<String, String>();
|
||||||
String postBody = null;
|
String postBody = null;
|
||||||
|
|
||||||
|
pathParams.Add("format", "json");
|
||||||
|
{{#pathParams}} if ({{paramName}} != null) pathParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // path parameter
|
||||||
|
{{/pathParams}}
|
||||||
|
|
||||||
{{#queryParams}} if ({{paramName}} != null) queryParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // query parameter
|
{{#queryParams}} if ({{paramName}} != null) queryParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // query parameter
|
||||||
{{/queryParams}}
|
{{/queryParams}}
|
||||||
{{#headerParams}} if ({{paramName}} != null) headerParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // header parameter
|
{{#headerParams}} if ({{paramName}} != null) headerParams.Add("{{baseName}}", apiClient.ParameterToString({{paramName}})); // header parameter
|
||||||
@ -160,7 +164,7 @@ namespace {{packageName}}.Api {
|
|||||||
String[] authSettings = new String[] { {{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}} };
|
String[] authSettings = new String[] { {{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}} };
|
||||||
|
|
||||||
// make the HTTP request
|
// make the HTTP request
|
||||||
IRestResponse response = (IRestResponse) await apiClient.CallApiAsync(path, Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams, authSettings);
|
IRestResponse response = (IRestResponse) await apiClient.CallApiAsync(path, Method.{{httpMethod}}, queryParams, postBody, headerParams, formParams, fileParams, pathParams, authSettings);
|
||||||
if (((int)response.StatusCode) >= 400) {
|
if (((int)response.StatusCode) >= 400) {
|
||||||
throw new ApiException ((int)response.StatusCode, "Error calling {{nickname}}: " + response.Content, response.Content);
|
throw new ApiException ((int)response.StatusCode, "Error calling {{nickname}}: " + response.Content, response.Content);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user