diff --git a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache
index cb6deb0c170..c0a8a132029 100644
--- a/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache
+++ b/modules/swagger-codegen/src/main/resources/csharp/ApiClient.mustache
@@ -165,24 +165,12 @@ namespace {{packageName}}.Client
if (postBody != null) // http body (model or byte[]) parameter
{
- if (postBody.GetType() == typeof(String))
- {
- {{#netStandard}}
- request.AddParameter(new Parameter { Value = postBody, Type = ParameterType.RequestBody, ContentType = "application/json" });
- {{/netStandard}}
- {{^netStandard}}
- request.AddParameter("application/json", postBody, ParameterType.RequestBody);
- {{/netStandard}}
- }
- else if (postBody.GetType() == typeof(byte[]))
- {
- {{#netStandard}}
- request.AddParameter(new Parameter { Value = postBody, Type = ParameterType.RequestBody, ContentType = contentType });
- {{/netStandard}}
- {{^netStandard}}
- request.AddParameter(contentType, postBody, ParameterType.RequestBody);
- {{/netStandard}}
- }
+ {{#netStandard}}
+ request.AddParameter(new Parameter { Value = postBody, Type = ParameterType.RequestBody, ContentType = contentType });
+ {{/netStandard}}
+ {{^netStandard}}
+ request.AddParameter(contentType, postBody, ParameterType.RequestBody);
+ {{/netStandard}}
}
return request;
@@ -399,9 +387,25 @@ namespace {{packageName}}.Client
}
}
+ ///
+ ///Check if the given MIME is a JSON MIME.
+ ///JSON MIME examples:
+ /// application/json
+ /// application/json; charset=UTF8
+ /// APPLICATION/JSON
+ /// application/vnd.company+json
+ ///
+ /// MIME
+ /// Returns True if MIME type is json.
+ public bool IsJsonMime(String mime)
+ {
+ var jsonRegex = new Regex("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");
+ return mime != null && (jsonRegex.IsMatch(mime) || mime.Equals("application/json-patch+json"));
+ }
+
///
/// Select the Content-Type header's value from the given content-type array:
- /// if JSON exists in the given array, use it;
+ /// if JSON type exists in the given array, use it;
/// otherwise use the first one defined in 'consumes'
///
/// The Content-Type array to select from.
@@ -409,11 +413,14 @@ namespace {{packageName}}.Client
public String SelectHeaderContentType(String[] contentTypes)
{
if (contentTypes.Length == 0)
- return null;
-
- if (contentTypes.Contains("application/json", StringComparer.OrdinalIgnoreCase))
return "application/json";
+ foreach (var contentType in contentTypes)
+ {
+ if (IsJsonMime(contentType.ToLower()))
+ return contentType;
+ }
+
return contentTypes[0]; // use the first content type specified in 'consumes'
}
diff --git a/samples/client/petstore/csharp/SwaggerClient/README.md b/samples/client/petstore/csharp/SwaggerClient/README.md
index 257a7e86293..257d9c889f2 100644
--- a/samples/client/petstore/csharp/SwaggerClient/README.md
+++ b/samples/client/petstore/csharp/SwaggerClient/README.md
@@ -68,17 +68,18 @@ namespace Example
public void main()
{
- var apiInstance = new FakeApi();
- var body = new OuterBoolean(); // OuterBoolean | Input boolean as post body (optional)
+ var apiInstance = new AnotherFakeApi();
+ var body = new ModelClient(); // ModelClient | client model
try
{
- OuterBoolean result = apiInstance.FakeOuterBooleanSerialize(body);
+ // To test special tags
+ ModelClient result = apiInstance.TestSpecialTags(body);
Debug.WriteLine(result);
}
catch (Exception e)
{
- Debug.Print("Exception when calling FakeApi.FakeOuterBooleanSerialize: " + e.Message );
+ Debug.Print("Exception when calling AnotherFakeApi.TestSpecialTags: " + e.Message );
}
}
@@ -93,6 +94,7 @@ All URIs are relative to *http://petstore.swagger.io:80/v2*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
+*AnotherFakeApi* | [**TestSpecialTags**](docs/AnotherFakeApi.md#testspecialtags) | **PATCH** /another-fake/dummy | To test special tags
*FakeApi* | [**FakeOuterBooleanSerialize**](docs/FakeApi.md#fakeouterbooleanserialize) | **POST** /fake/outer/boolean |
*FakeApi* | [**FakeOuterCompositeSerialize**](docs/FakeApi.md#fakeoutercompositeserialize) | **POST** /fake/outer/composite |
*FakeApi* | [**FakeOuterNumberSerialize**](docs/FakeApi.md#fakeouternumberserialize) | **POST** /fake/outer/number |
@@ -101,7 +103,7 @@ Class | Method | HTTP request | Description
*FakeApi* | [**TestEndpointParameters**](docs/FakeApi.md#testendpointparameters) | **POST** /fake | Fake endpoint for testing various parameters 假端點 偽のエンドポイント 가짜 엔드 포인트
*FakeApi* | [**TestEnumParameters**](docs/FakeApi.md#testenumparameters) | **GET** /fake | To test enum parameters
*FakeApi* | [**TestJsonFormData**](docs/FakeApi.md#testjsonformdata) | **GET** /fake/jsonFormData | test json serialization of form data
-*Fake_classname_tags123Api* | [**TestClassname**](docs/Fake_classname_tags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case
+*FakeClassnameTags123Api* | [**TestClassname**](docs/FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case
*PetApi* | [**AddPet**](docs/PetApi.md#addpet) | **POST** /pet | Add a new pet to the store
*PetApi* | [**DeletePet**](docs/PetApi.md#deletepet) | **DELETE** /pet/{petId} | Deletes a pet
*PetApi* | [**FindPetsByStatus**](docs/PetApi.md#findpetsbystatus) | **GET** /pet/findByStatus | Finds Pets by status
diff --git a/samples/client/petstore/csharp/SwaggerClient/docs/AnotherFakeApi.md b/samples/client/petstore/csharp/SwaggerClient/docs/AnotherFakeApi.md
new file mode 100644
index 00000000000..89bc406754a
--- /dev/null
+++ b/samples/client/petstore/csharp/SwaggerClient/docs/AnotherFakeApi.md
@@ -0,0 +1,70 @@
+# IO.Swagger.Api.AnotherFakeApi
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**TestSpecialTags**](AnotherFakeApi.md#testspecialtags) | **PATCH** /another-fake/dummy | To test special tags
+
+
+
+# **TestSpecialTags**
+> ModelClient TestSpecialTags (ModelClient body)
+
+To test special tags
+
+To test special tags
+
+### Example
+```csharp
+using System;
+using System.Diagnostics;
+using IO.Swagger.Api;
+using IO.Swagger.Client;
+using IO.Swagger.Model;
+
+namespace Example
+{
+ public class TestSpecialTagsExample
+ {
+ public void main()
+ {
+ var apiInstance = new AnotherFakeApi();
+ var body = new ModelClient(); // ModelClient | client model
+
+ try
+ {
+ // To test special tags
+ ModelClient result = apiInstance.TestSpecialTags(body);
+ Debug.WriteLine(result);
+ }
+ catch (Exception e)
+ {
+ Debug.Print("Exception when calling AnotherFakeApi.TestSpecialTags: " + e.Message );
+ }
+ }
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**ModelClient**](ModelClient.md)| client model |
+
+### Return type
+
+[**ModelClient**](ModelClient.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/client/petstore/csharp/SwaggerClient/docs/FakeClassnameTags123Api.md b/samples/client/petstore/csharp/SwaggerClient/docs/FakeClassnameTags123Api.md
new file mode 100644
index 00000000000..5f1d0ca776b
--- /dev/null
+++ b/samples/client/petstore/csharp/SwaggerClient/docs/FakeClassnameTags123Api.md
@@ -0,0 +1,73 @@
+# IO.Swagger.Api.FakeClassnameTags123Api
+
+All URIs are relative to *http://petstore.swagger.io:80/v2*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**TestClassname**](FakeClassnameTags123Api.md#testclassname) | **PATCH** /fake_classname_test | To test class name in snake case
+
+
+
+# **TestClassname**
+> ModelClient TestClassname (ModelClient body)
+
+To test class name in snake case
+
+### Example
+```csharp
+using System;
+using System.Diagnostics;
+using IO.Swagger.Api;
+using IO.Swagger.Client;
+using IO.Swagger.Model;
+
+namespace Example
+{
+ public class TestClassnameExample
+ {
+ public void main()
+ {
+ // Configure API key authorization: api_key_query
+ Configuration.Default.AddApiKey("api_key_query", "YOUR_API_KEY");
+ // Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
+ // Configuration.Default.AddApiKeyPrefix("api_key_query", "Bearer");
+
+ var apiInstance = new FakeClassnameTags123Api();
+ var body = new ModelClient(); // ModelClient | client model
+
+ try
+ {
+ // To test class name in snake case
+ ModelClient result = apiInstance.TestClassname(body);
+ Debug.WriteLine(result);
+ }
+ catch (Exception e)
+ {
+ Debug.Print("Exception when calling FakeClassnameTags123Api.TestClassname: " + e.Message );
+ }
+ }
+ }
+}
+```
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **body** | [**ModelClient**](ModelClient.md)| client model |
+
+### Return type
+
+[**ModelClient**](ModelClient.md)
+
+### Authorization
+
+[api_key_query](../README.md#api_key_query)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger.Test/Api/AnotherFakeApiTests.cs b/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger.Test/Api/AnotherFakeApiTests.cs
new file mode 100644
index 00000000000..070e217a0f5
--- /dev/null
+++ b/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger.Test/Api/AnotherFakeApiTests.cs
@@ -0,0 +1,81 @@
+/*
+ * Swagger Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: apiteam@swagger.io
+ * Generated by: https://github.com/swagger-api/swagger-codegen.git
+ */
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reflection;
+using RestSharp;
+using NUnit.Framework;
+
+using IO.Swagger.Client;
+using IO.Swagger.Api;
+using IO.Swagger.Model;
+
+namespace IO.Swagger.Test
+{
+ ///
+ /// Class for testing AnotherFakeApi
+ ///
+ ///
+ /// This file is automatically generated by Swagger Codegen.
+ /// Please update the test case below to test the API endpoint.
+ ///
+ [TestFixture]
+ public class AnotherFakeApiTests
+ {
+ private AnotherFakeApi instance;
+
+ ///
+ /// Setup before each unit test
+ ///
+ [SetUp]
+ public void Init()
+ {
+ instance = new AnotherFakeApi();
+ }
+
+ ///
+ /// Clean up after each unit test
+ ///
+ [TearDown]
+ public void Cleanup()
+ {
+
+ }
+
+ ///
+ /// Test an instance of AnotherFakeApi
+ ///
+ [Test]
+ public void InstanceTest()
+ {
+ // TODO uncomment below to test 'IsInstanceOfType' AnotherFakeApi
+ //Assert.IsInstanceOfType(typeof(AnotherFakeApi), instance, "instance is a AnotherFakeApi");
+ }
+
+
+ ///
+ /// Test TestSpecialTags
+ ///
+ [Test]
+ public void TestSpecialTagsTest()
+ {
+ // TODO uncomment below to test the method and replace null with proper value
+ //ModelClient body = null;
+ //var response = instance.TestSpecialTags(body);
+ //Assert.IsInstanceOf (response, "response is ModelClient");
+ }
+
+ }
+
+}
diff --git a/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger.Test/Api/FakeClassnameTags123ApiTests.cs b/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger.Test/Api/FakeClassnameTags123ApiTests.cs
new file mode 100644
index 00000000000..36a5acb38a9
--- /dev/null
+++ b/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger.Test/Api/FakeClassnameTags123ApiTests.cs
@@ -0,0 +1,81 @@
+/*
+ * Swagger Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: apiteam@swagger.io
+ * Generated by: https://github.com/swagger-api/swagger-codegen.git
+ */
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reflection;
+using RestSharp;
+using NUnit.Framework;
+
+using IO.Swagger.Client;
+using IO.Swagger.Api;
+using IO.Swagger.Model;
+
+namespace IO.Swagger.Test
+{
+ ///
+ /// Class for testing FakeClassnameTags123Api
+ ///
+ ///
+ /// This file is automatically generated by Swagger Codegen.
+ /// Please update the test case below to test the API endpoint.
+ ///
+ [TestFixture]
+ public class FakeClassnameTags123ApiTests
+ {
+ private FakeClassnameTags123Api instance;
+
+ ///
+ /// Setup before each unit test
+ ///
+ [SetUp]
+ public void Init()
+ {
+ instance = new FakeClassnameTags123Api();
+ }
+
+ ///
+ /// Clean up after each unit test
+ ///
+ [TearDown]
+ public void Cleanup()
+ {
+
+ }
+
+ ///
+ /// Test an instance of FakeClassnameTags123Api
+ ///
+ [Test]
+ public void InstanceTest()
+ {
+ // TODO uncomment below to test 'IsInstanceOfType' FakeClassnameTags123Api
+ //Assert.IsInstanceOfType(typeof(FakeClassnameTags123Api), instance, "instance is a FakeClassnameTags123Api");
+ }
+
+
+ ///
+ /// Test TestClassname
+ ///
+ [Test]
+ public void TestClassnameTest()
+ {
+ // TODO uncomment below to test the method and replace null with proper value
+ //ModelClient body = null;
+ //var response = instance.TestClassname(body);
+ //Assert.IsInstanceOf (response, "response is ModelClient");
+ }
+
+ }
+
+}
diff --git a/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger.Test/Client/ApiClientTests.cs b/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger.Test/Client/ApiClientTests.cs
index 8b10afdeb0e..8f7c10d5e43 100644
--- a/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger.Test/Client/ApiClientTests.cs
+++ b/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger.Test/Client/ApiClientTests.cs
@@ -41,7 +41,7 @@ public void TestSelectHeaderContentType ()
Assert.AreEqual("application/xml", api.SelectHeaderContentType (contentTypes));
contentTypes = new String[] {};
- Assert.IsNull(api.SelectHeaderContentType (contentTypes));
+ Assert.AreEqual("application/json", api.SelectHeaderContentType (contentTypes));
}
///
diff --git a/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger/Api/AnotherFakeApi.cs b/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger/Api/AnotherFakeApi.cs
new file mode 100644
index 00000000000..815cfe4cfb6
--- /dev/null
+++ b/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger/Api/AnotherFakeApi.cs
@@ -0,0 +1,321 @@
+/*
+ * Swagger Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: apiteam@swagger.io
+ * Generated by: https://github.com/swagger-api/swagger-codegen.git
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using RestSharp;
+using IO.Swagger.Client;
+using IO.Swagger.Model;
+
+namespace IO.Swagger.Api
+{
+ ///
+ /// Represents a collection of functions to interact with the API endpoints
+ ///
+ public interface IAnotherFakeApi : IApiAccessor
+ {
+ #region Synchronous Operations
+ ///
+ /// To test special tags
+ ///
+ ///
+ /// To test special tags
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// ModelClient
+ ModelClient TestSpecialTags (ModelClient body);
+
+ ///
+ /// To test special tags
+ ///
+ ///
+ /// To test special tags
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// ApiResponse of ModelClient
+ ApiResponse TestSpecialTagsWithHttpInfo (ModelClient body);
+ #endregion Synchronous Operations
+ #region Asynchronous Operations
+ ///
+ /// To test special tags
+ ///
+ ///
+ /// To test special tags
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// Task of ModelClient
+ System.Threading.Tasks.Task TestSpecialTagsAsync (ModelClient body);
+
+ ///
+ /// To test special tags
+ ///
+ ///
+ /// To test special tags
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// Task of ApiResponse (ModelClient)
+ System.Threading.Tasks.Task> TestSpecialTagsAsyncWithHttpInfo (ModelClient body);
+ #endregion Asynchronous Operations
+ }
+
+ ///
+ /// Represents a collection of functions to interact with the API endpoints
+ ///
+ public partial class AnotherFakeApi : IAnotherFakeApi
+ {
+ private IO.Swagger.Client.ExceptionFactory _exceptionFactory = (name, response) => null;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ public AnotherFakeApi(String basePath)
+ {
+ this.Configuration = new Configuration { BasePath = basePath };
+
+ ExceptionFactory = IO.Swagger.Client.Configuration.DefaultExceptionFactory;
+ }
+
+ ///
+ /// Initializes a new instance of the class
+ /// using Configuration object
+ ///
+ /// An instance of Configuration
+ ///
+ public AnotherFakeApi(Configuration configuration = null)
+ {
+ if (configuration == null) // use the default one in Configuration
+ this.Configuration = Configuration.Default;
+ else
+ this.Configuration = configuration;
+
+ ExceptionFactory = IO.Swagger.Client.Configuration.DefaultExceptionFactory;
+ }
+
+ ///
+ /// Gets the base path of the API client.
+ ///
+ /// The base path
+ public String GetBasePath()
+ {
+ return this.Configuration.ApiClient.RestClient.BaseUrl.ToString();
+ }
+
+ ///
+ /// Sets the base path of the API client.
+ ///
+ /// The base path
+ [Obsolete("SetBasePath is deprecated, please do 'Configuration.ApiClient = new ApiClient(\"http://new-path\")' instead.")]
+ public void SetBasePath(String basePath)
+ {
+ // do nothing
+ }
+
+ ///
+ /// Gets or sets the configuration object
+ ///
+ /// An instance of the Configuration
+ public Configuration Configuration {get; set;}
+
+ ///
+ /// Provides a factory method hook for the creation of exceptions.
+ ///
+ public IO.Swagger.Client.ExceptionFactory ExceptionFactory
+ {
+ get
+ {
+ if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1)
+ {
+ throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported.");
+ }
+ return _exceptionFactory;
+ }
+ set { _exceptionFactory = value; }
+ }
+
+ ///
+ /// Gets the default header.
+ ///
+ /// Dictionary of HTTP header
+ [Obsolete("DefaultHeader is deprecated, please use Configuration.DefaultHeader instead.")]
+ public IDictionary DefaultHeader()
+ {
+ return new ReadOnlyDictionary(this.Configuration.DefaultHeader);
+ }
+
+ ///
+ /// Add default header.
+ ///
+ /// Header field name.
+ /// Header field value.
+ ///
+ [Obsolete("AddDefaultHeader is deprecated, please use Configuration.AddDefaultHeader instead.")]
+ public void AddDefaultHeader(string key, string value)
+ {
+ this.Configuration.AddDefaultHeader(key, value);
+ }
+
+ ///
+ /// To test special tags To test special tags
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// ModelClient
+ public ModelClient TestSpecialTags (ModelClient body)
+ {
+ ApiResponse localVarResponse = TestSpecialTagsWithHttpInfo(body);
+ return localVarResponse.Data;
+ }
+
+ ///
+ /// To test special tags To test special tags
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// ApiResponse of ModelClient
+ public ApiResponse< ModelClient > TestSpecialTagsWithHttpInfo (ModelClient body)
+ {
+ // verify the required parameter 'body' is set
+ if (body == null)
+ throw new ApiException(400, "Missing required parameter 'body' when calling AnotherFakeApi->TestSpecialTags");
+
+ var localVarPath = "/another-fake/dummy";
+ var localVarPathParams = new Dictionary();
+ var localVarQueryParams = new List>();
+ var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader);
+ var localVarFormParams = new Dictionary();
+ var localVarFileParams = new Dictionary();
+ Object localVarPostBody = null;
+
+ // to determine the Content-Type header
+ String[] localVarHttpContentTypes = new String[] {
+ "application/json"
+ };
+ String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);
+
+ // to determine the Accept header
+ String[] localVarHttpHeaderAccepts = new String[] {
+ "application/json"
+ };
+ String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
+ if (localVarHttpHeaderAccept != null)
+ localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);
+
+ if (body != null && body.GetType() != typeof(byte[]))
+ {
+ localVarPostBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter
+ }
+ else
+ {
+ localVarPostBody = body; // byte array
+ }
+
+
+ // make the HTTP request
+ IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath,
+ Method.PATCH, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
+ localVarPathParams, localVarHttpContentType);
+
+ int localVarStatusCode = (int) localVarResponse.StatusCode;
+
+ if (ExceptionFactory != null)
+ {
+ Exception exception = ExceptionFactory("TestSpecialTags", localVarResponse);
+ if (exception != null) throw exception;
+ }
+
+ return new ApiResponse(localVarStatusCode,
+ localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()),
+ (ModelClient) Configuration.ApiClient.Deserialize(localVarResponse, typeof(ModelClient)));
+ }
+
+ ///
+ /// To test special tags To test special tags
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// Task of ModelClient
+ public async System.Threading.Tasks.Task TestSpecialTagsAsync (ModelClient body)
+ {
+ ApiResponse localVarResponse = await TestSpecialTagsAsyncWithHttpInfo(body);
+ return localVarResponse.Data;
+
+ }
+
+ ///
+ /// To test special tags To test special tags
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// Task of ApiResponse (ModelClient)
+ public async System.Threading.Tasks.Task> TestSpecialTagsAsyncWithHttpInfo (ModelClient body)
+ {
+ // verify the required parameter 'body' is set
+ if (body == null)
+ throw new ApiException(400, "Missing required parameter 'body' when calling AnotherFakeApi->TestSpecialTags");
+
+ var localVarPath = "/another-fake/dummy";
+ var localVarPathParams = new Dictionary();
+ var localVarQueryParams = new List>();
+ var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader);
+ var localVarFormParams = new Dictionary();
+ var localVarFileParams = new Dictionary();
+ Object localVarPostBody = null;
+
+ // to determine the Content-Type header
+ String[] localVarHttpContentTypes = new String[] {
+ "application/json"
+ };
+ String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);
+
+ // to determine the Accept header
+ String[] localVarHttpHeaderAccepts = new String[] {
+ "application/json"
+ };
+ String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
+ if (localVarHttpHeaderAccept != null)
+ localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);
+
+ if (body != null && body.GetType() != typeof(byte[]))
+ {
+ localVarPostBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter
+ }
+ else
+ {
+ localVarPostBody = body; // byte array
+ }
+
+
+ // make the HTTP request
+ IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath,
+ Method.PATCH, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
+ localVarPathParams, localVarHttpContentType);
+
+ int localVarStatusCode = (int) localVarResponse.StatusCode;
+
+ if (ExceptionFactory != null)
+ {
+ Exception exception = ExceptionFactory("TestSpecialTags", localVarResponse);
+ if (exception != null) throw exception;
+ }
+
+ return new ApiResponse(localVarStatusCode,
+ localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()),
+ (ModelClient) Configuration.ApiClient.Deserialize(localVarResponse, typeof(ModelClient)));
+ }
+
+ }
+}
diff --git a/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger/Api/FakeClassnameTags123Api.cs b/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger/Api/FakeClassnameTags123Api.cs
new file mode 100644
index 00000000000..264994669de
--- /dev/null
+++ b/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger/Api/FakeClassnameTags123Api.cs
@@ -0,0 +1,331 @@
+/*
+ * Swagger Petstore
+ *
+ * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
+ *
+ * OpenAPI spec version: 1.0.0
+ * Contact: apiteam@swagger.io
+ * Generated by: https://github.com/swagger-api/swagger-codegen.git
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using RestSharp;
+using IO.Swagger.Client;
+using IO.Swagger.Model;
+
+namespace IO.Swagger.Api
+{
+ ///
+ /// Represents a collection of functions to interact with the API endpoints
+ ///
+ public interface IFakeClassnameTags123Api : IApiAccessor
+ {
+ #region Synchronous Operations
+ ///
+ /// To test class name in snake case
+ ///
+ ///
+ ///
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// ModelClient
+ ModelClient TestClassname (ModelClient body);
+
+ ///
+ /// To test class name in snake case
+ ///
+ ///
+ ///
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// ApiResponse of ModelClient
+ ApiResponse TestClassnameWithHttpInfo (ModelClient body);
+ #endregion Synchronous Operations
+ #region Asynchronous Operations
+ ///
+ /// To test class name in snake case
+ ///
+ ///
+ ///
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// Task of ModelClient
+ System.Threading.Tasks.Task TestClassnameAsync (ModelClient body);
+
+ ///
+ /// To test class name in snake case
+ ///
+ ///
+ ///
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// Task of ApiResponse (ModelClient)
+ System.Threading.Tasks.Task> TestClassnameAsyncWithHttpInfo (ModelClient body);
+ #endregion Asynchronous Operations
+ }
+
+ ///
+ /// Represents a collection of functions to interact with the API endpoints
+ ///
+ public partial class FakeClassnameTags123Api : IFakeClassnameTags123Api
+ {
+ private IO.Swagger.Client.ExceptionFactory _exceptionFactory = (name, response) => null;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ public FakeClassnameTags123Api(String basePath)
+ {
+ this.Configuration = new Configuration { BasePath = basePath };
+
+ ExceptionFactory = IO.Swagger.Client.Configuration.DefaultExceptionFactory;
+ }
+
+ ///
+ /// Initializes a new instance of the class
+ /// using Configuration object
+ ///
+ /// An instance of Configuration
+ ///
+ public FakeClassnameTags123Api(Configuration configuration = null)
+ {
+ if (configuration == null) // use the default one in Configuration
+ this.Configuration = Configuration.Default;
+ else
+ this.Configuration = configuration;
+
+ ExceptionFactory = IO.Swagger.Client.Configuration.DefaultExceptionFactory;
+ }
+
+ ///
+ /// Gets the base path of the API client.
+ ///
+ /// The base path
+ public String GetBasePath()
+ {
+ return this.Configuration.ApiClient.RestClient.BaseUrl.ToString();
+ }
+
+ ///
+ /// Sets the base path of the API client.
+ ///
+ /// The base path
+ [Obsolete("SetBasePath is deprecated, please do 'Configuration.ApiClient = new ApiClient(\"http://new-path\")' instead.")]
+ public void SetBasePath(String basePath)
+ {
+ // do nothing
+ }
+
+ ///
+ /// Gets or sets the configuration object
+ ///
+ /// An instance of the Configuration
+ public Configuration Configuration {get; set;}
+
+ ///
+ /// Provides a factory method hook for the creation of exceptions.
+ ///
+ public IO.Swagger.Client.ExceptionFactory ExceptionFactory
+ {
+ get
+ {
+ if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1)
+ {
+ throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported.");
+ }
+ return _exceptionFactory;
+ }
+ set { _exceptionFactory = value; }
+ }
+
+ ///
+ /// Gets the default header.
+ ///
+ /// Dictionary of HTTP header
+ [Obsolete("DefaultHeader is deprecated, please use Configuration.DefaultHeader instead.")]
+ public IDictionary DefaultHeader()
+ {
+ return new ReadOnlyDictionary(this.Configuration.DefaultHeader);
+ }
+
+ ///
+ /// Add default header.
+ ///
+ /// Header field name.
+ /// Header field value.
+ ///
+ [Obsolete("AddDefaultHeader is deprecated, please use Configuration.AddDefaultHeader instead.")]
+ public void AddDefaultHeader(string key, string value)
+ {
+ this.Configuration.AddDefaultHeader(key, value);
+ }
+
+ ///
+ /// To test class name in snake case
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// ModelClient
+ public ModelClient TestClassname (ModelClient body)
+ {
+ ApiResponse localVarResponse = TestClassnameWithHttpInfo(body);
+ return localVarResponse.Data;
+ }
+
+ ///
+ /// To test class name in snake case
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// ApiResponse of ModelClient
+ public ApiResponse< ModelClient > TestClassnameWithHttpInfo (ModelClient body)
+ {
+ // verify the required parameter 'body' is set
+ if (body == null)
+ throw new ApiException(400, "Missing required parameter 'body' when calling FakeClassnameTags123Api->TestClassname");
+
+ var localVarPath = "/fake_classname_test";
+ var localVarPathParams = new Dictionary();
+ var localVarQueryParams = new List>();
+ var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader);
+ var localVarFormParams = new Dictionary();
+ var localVarFileParams = new Dictionary();
+ Object localVarPostBody = null;
+
+ // to determine the Content-Type header
+ String[] localVarHttpContentTypes = new String[] {
+ "application/json"
+ };
+ String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);
+
+ // to determine the Accept header
+ String[] localVarHttpHeaderAccepts = new String[] {
+ "application/json"
+ };
+ String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
+ if (localVarHttpHeaderAccept != null)
+ localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);
+
+ if (body != null && body.GetType() != typeof(byte[]))
+ {
+ localVarPostBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter
+ }
+ else
+ {
+ localVarPostBody = body; // byte array
+ }
+
+ // authentication (api_key_query) required
+ if (!String.IsNullOrEmpty(Configuration.GetApiKeyWithPrefix("api_key_query")))
+ {
+ localVarQueryParams.AddRange(Configuration.ApiClient.ParameterToKeyValuePairs("", "api_key_query", Configuration.GetApiKeyWithPrefix("api_key_query")));
+ }
+
+ // make the HTTP request
+ IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath,
+ Method.PATCH, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
+ localVarPathParams, localVarHttpContentType);
+
+ int localVarStatusCode = (int) localVarResponse.StatusCode;
+
+ if (ExceptionFactory != null)
+ {
+ Exception exception = ExceptionFactory("TestClassname", localVarResponse);
+ if (exception != null) throw exception;
+ }
+
+ return new ApiResponse(localVarStatusCode,
+ localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()),
+ (ModelClient) Configuration.ApiClient.Deserialize(localVarResponse, typeof(ModelClient)));
+ }
+
+ ///
+ /// To test class name in snake case
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// Task of ModelClient
+ public async System.Threading.Tasks.Task TestClassnameAsync (ModelClient body)
+ {
+ ApiResponse localVarResponse = await TestClassnameAsyncWithHttpInfo(body);
+ return localVarResponse.Data;
+
+ }
+
+ ///
+ /// To test class name in snake case
+ ///
+ /// Thrown when fails to make API call
+ /// client model
+ /// Task of ApiResponse (ModelClient)
+ public async System.Threading.Tasks.Task> TestClassnameAsyncWithHttpInfo (ModelClient body)
+ {
+ // verify the required parameter 'body' is set
+ if (body == null)
+ throw new ApiException(400, "Missing required parameter 'body' when calling FakeClassnameTags123Api->TestClassname");
+
+ var localVarPath = "/fake_classname_test";
+ var localVarPathParams = new Dictionary();
+ var localVarQueryParams = new List>();
+ var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader);
+ var localVarFormParams = new Dictionary();
+ var localVarFileParams = new Dictionary();
+ Object localVarPostBody = null;
+
+ // to determine the Content-Type header
+ String[] localVarHttpContentTypes = new String[] {
+ "application/json"
+ };
+ String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);
+
+ // to determine the Accept header
+ String[] localVarHttpHeaderAccepts = new String[] {
+ "application/json"
+ };
+ String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
+ if (localVarHttpHeaderAccept != null)
+ localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);
+
+ if (body != null && body.GetType() != typeof(byte[]))
+ {
+ localVarPostBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter
+ }
+ else
+ {
+ localVarPostBody = body; // byte array
+ }
+
+ // authentication (api_key_query) required
+ if (!String.IsNullOrEmpty(Configuration.GetApiKeyWithPrefix("api_key_query")))
+ {
+ localVarQueryParams.AddRange(Configuration.ApiClient.ParameterToKeyValuePairs("", "api_key_query", Configuration.GetApiKeyWithPrefix("api_key_query")));
+ }
+
+ // make the HTTP request
+ IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath,
+ Method.PATCH, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
+ localVarPathParams, localVarHttpContentType);
+
+ int localVarStatusCode = (int) localVarResponse.StatusCode;
+
+ if (ExceptionFactory != null)
+ {
+ Exception exception = ExceptionFactory("TestClassname", localVarResponse);
+ if (exception != null) throw exception;
+ }
+
+ return new ApiResponse(localVarStatusCode,
+ localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()),
+ (ModelClient) Configuration.ApiClient.Deserialize(localVarResponse, typeof(ModelClient)));
+ }
+
+ }
+}
diff --git a/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger/Client/ApiClient.cs b/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger/Client/ApiClient.cs
index f4c961cc61a..51042091e7d 100644
--- a/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger/Client/ApiClient.cs
+++ b/samples/client/petstore/csharp/SwaggerClient/src/IO.Swagger/Client/ApiClient.cs
@@ -139,14 +139,7 @@ private RestRequest PrepareRequest(
if (postBody != null) // http body (model or byte[]) parameter
{
- if (postBody.GetType() == typeof(String))
- {
- request.AddParameter("application/json", postBody, ParameterType.RequestBody);
- }
- else if (postBody.GetType() == typeof(byte[]))
- {
- request.AddParameter(contentType, postBody, ParameterType.RequestBody);
- }
+ request.AddParameter(contentType, postBody, ParameterType.RequestBody);
}
return request;
@@ -351,9 +344,25 @@ public String Serialize(object obj)
}
}
+ ///
+ ///Check if the given MIME is a JSON MIME.
+ ///JSON MIME examples:
+ /// application/json
+ /// application/json; charset=UTF8
+ /// APPLICATION/JSON
+ /// application/vnd.company+json
+ ///
+ /// MIME
+ /// Returns True if MIME type is json.
+ public bool IsJsonMime(String mime)
+ {
+ var jsonRegex = new Regex("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");
+ return mime != null && (jsonRegex.IsMatch(mime) || mime.Equals("application/json-patch+json", StringComparison.InvariantCultureIgnoreCase));
+ }
+
///
/// Select the Content-Type header's value from the given content-type array:
- /// if JSON exists in the given array, use it;
+ /// if JSON type exists in the given array, use it;
/// otherwise use the first one defined in 'consumes'
///
/// The Content-Type array to select from.
@@ -361,11 +370,14 @@ public String Serialize(object obj)
public String SelectHeaderContentType(String[] contentTypes)
{
if (contentTypes.Length == 0)
- return null;
-
- if (contentTypes.Contains("application/json", StringComparer.OrdinalIgnoreCase))
return "application/json";
+ foreach (var contentType in contentTypes)
+ {
+ if (IsJsonMime(contentType))
+ return contentType;
+ }
+
return contentTypes[0]; // use the first content type specified in 'consumes'
}