Skip to content

Commit b059910

Browse files
committed
Merge pull request #700 from wing328/csharp_restcsharp
Use RestSharp for CSharp API client
2 parents 2d9772e + c12673a commit b059910

File tree

16 files changed

+719
-1362
lines changed

16 files changed

+719
-1362
lines changed

modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/CSharpClientCodegen.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import java.io.File;
88

99
public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig {
10-
protected String invokerPackage = "io.swagger.client";
10+
protected String invokerPackage = "IO.Swagger.Client";
1111
protected String groupId = "io.swagger";
1212
protected String artifactId = "swagger-csharp-client";
1313
protected String artifactVersion = "1.0.0";
@@ -31,8 +31,8 @@ public CSharpClientCodegen() {
3131
modelTemplateFiles.put("model.mustache", ".cs");
3232
apiTemplateFiles.put("api.mustache", ".cs");
3333
templateDir = "csharp";
34-
apiPackage = "io.swagger.Api";
35-
modelPackage = "io.swagger.Model";
34+
apiPackage = "IO.Swagger.Api";
35+
modelPackage = "IO.Swagger.Model";
3636

3737
reservedWords = new HashSet<String> (
3838
Arrays.asList(
@@ -80,7 +80,7 @@ public CSharpClientCodegen() {
8080
typeMapping.put("double", "double?");
8181
typeMapping.put("number", "double?");
8282
typeMapping.put("Date", "DateTime");
83-
typeMapping.put("file", "byte[]");
83+
typeMapping.put("file", "string"); // path to file
8484
typeMapping.put("array", "List");
8585
typeMapping.put("map", "Dictionary");
8686

modules/swagger-codegen/src/main/resources/csharp/api.mustache

Lines changed: 44 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using RestSharp;
34
using {{invokerPackage}};
45
using {{modelPackage}};
56
{{#imports}}
@@ -9,101 +10,73 @@ namespace {{package}} {
910
{{#operations}}
1011
public class {{classname}} {
1112
string basePath;
12-
private readonly ApiInvoker apiInvoker = ApiInvoker.GetInstance();
13+
protected RestClient restClient;
1314
1415
public {{classname}}(String basePath = "{{basePath}}")
1516
{
1617
this.basePath = basePath;
18+
this.restClient = new RestClient(basePath);
1719
}
1820

19-
public ApiInvoker getInvoker() {
20-
return apiInvoker;
21-
}
22-
23-
// Sets the endpoint base url for the services being accessed
24-
public void setBasePath(string basePath) {
21+
/// <summary>
22+
/// Sets the endpoint base url for the services being accessed
23+
/// </summary>
24+
/// <param name="basePath"> Base URL
25+
/// <returns></returns>
26+
public void SetBasePath(string basePath) {
2527
this.basePath = basePath;
2628
}
2729

28-
// Gets the endpoint base url for the services being accessed
29-
public String getBasePath() {
30-
return basePath;
30+
/// <summary>
31+
/// Gets the endpoint base url for the services being accessed
32+
/// <returns>Base URL</returns>
33+
/// </summary>
34+
public String GetBasePath() {
35+
return this.basePath;
3136
}
3237

3338
{{#operation}}
34-
39+
3540
/// <summary>
3641
/// {{summary}} {{notes}}
3742
/// </summary>
38-
{{#allParams}}/// <param name="{{paramName}}">{{description}}</param>
39-
{{#hasMore}} {{/hasMore}}{{/allParams}}
40-
/// <returns></returns>
41-
public {{#returnType}}{{{returnType}}} {{/returnType}}{{^returnType}}void {{/returnType}} {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) {
42-
// create path and map variables
43-
var path = "{{path}}".Replace("{format}","json"){{#pathParams}}.Replace("{" + "{{baseName}}" + "}", apiInvoker.ParameterToString({{{paramName}}})){{/pathParams}};
43+
{{#allParams}} /// <param name="{{paramName}}">{{description}}</param>
44+
{{/allParams}}
45+
/// <returns>{{#returnType}}{{{returnType}}}{{/returnType}}</returns>
46+
public {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}} {{nickname}} ({{#allParams}}{{{dataType}}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) {
4447
45-
// query params
46-
var queryParams = new Dictionary<String, String>();
47-
var headerParams = new Dictionary<String, String>();
48-
var formParams = new Dictionary<String, object>();
48+
var _request = new RestRequest("{{path}}", Method.{{httpMethod}});
4949

50-
{{#requiredParamCount}}
51-
// verify required params are set
52-
if ({{/requiredParamCount}}{{#requiredParams}} {{paramName}} == null {{#hasMore}}|| {{/hasMore}}{{/requiredParams}}{{#requiredParamCount}}) {
53-
throw new ApiException(400, "missing required params");
54-
}
55-
{{/requiredParamCount}}
50+
{{#allParams}}{{#required}}
51+
// verify the required parameter '{{paramName}}' is set
52+
if ({{paramName}} == null) throw new ApiException(400, "Missing required parameter '{{paramName}}' when calling {{nickname}}");
53+
{{/required}}{{/allParams}}
5654

57-
{{#queryParams}}if ({{paramName}} != null){
58-
queryParams.Add("{{baseName}}", apiInvoker.ParameterToString({{paramName}}));
55+
// add default header, if any
56+
foreach(KeyValuePair<string, string> defaultHeader in ApiInvoker.GetDefaultHeader())
57+
{
58+
_request.AddHeader(defaultHeader.Key, defaultHeader.Value);
5959
}
60-
{{/queryParams}}
6160

62-
{{#headerParams}}headerParams.Add("{{baseName}}", apiInvoker.ParameterToString({{paramName}}));
61+
_request.AddUrlSegment("format", "json"); // set format to json by default
62+
{{#pathParams}}_request.AddUrlSegment("{{baseName}}", ApiInvoker.ParameterToString({{{paramName}}})); // path (url segment) parameter
63+
{{/pathParams}}
64+
{{#queryParams}} if ({{paramName}} != null) _request.AddParameter("{{baseName}}", ApiInvoker.ParameterToString({{paramName}})); // query parameter
65+
{{/queryParams}}
66+
{{#headerParams}} if ({{paramName}} != null) _request.AddHeader("{{baseName}}", ApiInvoker.ParameterToString({{paramName}})); // header parameter
6367
{{/headerParams}}
64-
65-
{{#formParams}}if ({{paramName}} != null){
66-
if({{paramName}} is byte[]) {
67-
formParams.Add("{{baseName}}", {{paramName}});
68-
} else {
69-
formParams.Add("{{baseName}}", apiInvoker.ParameterToString({{paramName}}));
70-
}
71-
}
68+
{{#formParams}}if ({{paramName}} != null) {{#isFile}}_request.AddFile("{{baseName}}", {{paramName}});{{/isFile}}{{^isFile}}_request.AddParameter("{{baseName}}", ApiInvoker.ParameterToString({{paramName}})); // form parameter{{/isFile}}
7269
{{/formParams}}
70+
{{#bodyParam}}_request.AddParameter("application/json", ApiInvoker.Serialize({{paramName}}), ParameterType.RequestBody); // http body (model) parameter
71+
{{/bodyParam}}
7372

74-
try {
75-
if (typeof({{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}) == typeof(byte[])) {
76-
{{#returnType}}
77-
var response = apiInvoker.invokeBinaryAPI(basePath, path, "GET", queryParams, null, headerParams, formParams);
78-
return ((object)response) as {{{returnType}}};
79-
{{/returnType}}
80-
{{^returnType}}
81-
apiInvoker.invokeBinaryAPI(basePath, path, "GET", queryParams, null, headerParams, formParams);
82-
return;
83-
{{/returnType}}
84-
} else {
85-
{{#returnType}}
86-
var response = apiInvoker.invokeAPI(basePath, path, "{{httpMethod}}", queryParams, {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}, headerParams, formParams);
87-
if (response != null){
88-
return ({{{returnType}}}) ApiInvoker.deserialize(response, typeof({{{returnType}}}));
89-
}
90-
else {
91-
return null;
92-
}
93-
{{/returnType}}
94-
{{^returnType}}
95-
apiInvoker.invokeAPI(basePath, path, "{{httpMethod}}", queryParams, {{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}null{{/bodyParam}}, headerParams, formParams);
96-
return;
97-
{{/returnType}}
98-
}
99-
} catch (ApiException ex) {
100-
if(ex.ErrorCode == 404) {
101-
return {{#returnType}}null{{/returnType}};
102-
}
103-
else {
104-
throw ex;
105-
}
73+
// make the HTTP request
74+
IRestResponse response = restClient.Execute(_request);
75+
if (((int)response.StatusCode) >= 400) {
76+
throw new ApiException ((int)response.StatusCode, "Error calling {{nickname}}: " + response.Content);
10677
}
78+
{{#returnType}}return ({{{returnType}}}) ApiInvoker.Deserialize(response.Content, typeof({{{returnType}}}));{{/returnType}}{{^returnType}}
79+
return;{{/returnType}}
10780
}
10881
{{/operation}}
10982
}
Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
11
using System;
22

33
namespace {{invokerPackage}} {
4+
45
public class ApiException : Exception {
5-
6-
private int errorCode = 0;
76
8-
public ApiException() {}
7+
public int ErrorCode { get; set; }
98

10-
public int ErrorCode {
11-
get
12-
{
13-
return errorCode;
14-
}
15-
}
9+
public ApiException() {}
1610

1711
public ApiException(int errorCode, string message) : base(message) {
18-
this.errorCode = errorCode;
12+
this.ErrorCode = errorCode;
1913
}
14+
2015
}
21-
}
16+
17+
}

0 commit comments

Comments
 (0)