diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/CSharpCompiler.cs b/src/NSwag.CodeGeneration.CSharp.Tests/CSharpCompiler.cs index 8773a571d..a9e5618ed 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/CSharpCompiler.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/CSharpCompiler.cs @@ -21,6 +21,7 @@ static CSharpCompiler() .Append(MetadataReference.CreateFromFile(typeof(System.Collections.ObjectModel.ObservableCollection<>).Assembly.Location)) .Append(MetadataReference.CreateFromFile(typeof(System.Runtime.Serialization.EnumMemberAttribute).Assembly.Location)) .Append(MetadataReference.CreateFromFile(typeof(System.Text.Json.Serialization.JsonConverter).Assembly.Location)) + .Append(MetadataReference.CreateFromFile(typeof(System.Net.Http.Json.JsonContent).Assembly.Location)) .ToList(); } diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/CodeGenerationTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/CodeGenerationTests.cs index 57f1c24cf..a9105f2ce 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/CodeGenerationTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/CodeGenerationTests.cs @@ -359,6 +359,7 @@ private static OpenApiDocument CreateDocument() var document = new OpenApiDocument(); var settings = new NewtonsoftJsonSchemaGeneratorSettings(); var generator = new JsonSchemaGenerator(settings); + var personReference = generator.Generate(typeof(Person), new OpenApiSchemaResolver(document, settings)); document.Paths["/Person"] = new OpenApiPathItem { @@ -371,13 +372,38 @@ private static OpenApiDocument CreateDocument() { Schema = new JsonSchema { - Reference = generator.Generate(typeof(Person), new OpenApiSchemaResolver(document, settings)) + Reference = personReference } } } } } }; + document.Paths["/CreatePerson"] = new OpenApiPathItem + { + [OpenApiOperationMethod.Post] = new OpenApiOperation + { + RequestBody = new OpenApiRequestBody + { + Content = + { + ["application/json"] = new OpenApiMediaType + { + Schema = new JsonSchema + { + Reference = personReference + } + } + } + }, + Responses = + { + { + "200", new OpenApiResponse() + } + } + } + }; return document; } } diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_Success_Response_contains_multiple_content_types_prioritizes_json.verified.txt b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_Success_Response_contains_multiple_content_types_prioritizes_json.verified.txt index 7ddbe22e7..4354ec541 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_Success_Response_contains_multiple_content_types_prioritizes_json.verified.txt +++ b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_Success_Response_contains_multiple_content_types_prioritizes_json.verified.txt @@ -124,6 +124,75 @@ namespace MyNamespace } } + public virtual System.Threading.Tasks.Task CreatePersonAsync(Person body) + { + return CreatePersonAsync(body, System.Threading.CancellationToken.None); + } + + public virtual async System.Threading.Tasks.Task CreatePersonAsync(Person body, System.Threading.CancellationToken cancellationToken) + { + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = System.Net.Http.Json.JsonContent.Create(body, System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"), JsonSerializerSettings); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + + var urlBuilder_ = new System.Text.StringBuilder(); + if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl); + // Operation Path: "CreatePerson" + urlBuilder_.Append("CreatePerson"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = new System.Collections.Generic.Dictionary>(); + foreach (var item_ in response_.Headers) + headers_[item_.Key] = item_.Value; + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + { + var responseData_ = response_.Content == null ? null : await ReadAsStringAsync(response_.Content, cancellationToken).ConfigureAwait(false); + throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + protected struct ObjectResponseResult { public ObjectResponseResult(T responseObject, string responseText) diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_Success_Response_contains_multiple_content_types_prioritizes_wildcard.verified.txt b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_Success_Response_contains_multiple_content_types_prioritizes_wildcard.verified.txt index d79a9f254..6ad5e1fa5 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_Success_Response_contains_multiple_content_types_prioritizes_wildcard.verified.txt +++ b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_Success_Response_contains_multiple_content_types_prioritizes_wildcard.verified.txt @@ -124,6 +124,75 @@ namespace MyNamespace } } + public virtual System.Threading.Tasks.Task CreatePersonAsync(Person body) + { + return CreatePersonAsync(body, System.Threading.CancellationToken.None); + } + + public virtual async System.Threading.Tasks.Task CreatePersonAsync(Person body, System.Threading.CancellationToken cancellationToken) + { + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = System.Net.Http.Json.JsonContent.Create(body, System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"), JsonSerializerSettings); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + + var urlBuilder_ = new System.Text.StringBuilder(); + if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl); + // Operation Path: "CreatePerson" + urlBuilder_.Append("CreatePerson"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = new System.Collections.Generic.Dictionary>(); + foreach (var item_ in response_.Headers) + headers_[item_.Key] = item_.Value; + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + { + var responseData_ = response_.Content == null ? null : await ReadAsStringAsync(response_.Content, cancellationToken).ConfigureAwait(false); + throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + protected struct ObjectResponseResult { public ObjectResponseResult(T responseObject, string responseText) diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_then_output_contains_expected_classes.verified.txt b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_then_output_contains_expected_classes.verified.txt index 1bebd6576..bbc7aa427 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_then_output_contains_expected_classes.verified.txt +++ b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_then_output_contains_expected_classes.verified.txt @@ -124,6 +124,77 @@ namespace MyNamespace } } + public virtual System.Threading.Tasks.Task CreatePersonAsync(Person body) + { + return CreatePersonAsync(body, System.Threading.CancellationToken.None); + } + + public virtual async System.Threading.Tasks.Task CreatePersonAsync(Person body, System.Threading.CancellationToken cancellationToken) + { + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var json_ = Newtonsoft.Json.JsonConvert.SerializeObject(body, JsonSerializerSettings); + var content_ = new System.Net.Http.StringContent(json_); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + + var urlBuilder_ = new System.Text.StringBuilder(); + if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl); + // Operation Path: "CreatePerson" + urlBuilder_.Append("CreatePerson"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = new System.Collections.Generic.Dictionary>(); + foreach (var item_ in response_.Headers) + headers_[item_.Key] = item_.Value; + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + { + var responseData_ = response_.Content == null ? null : await ReadAsStringAsync(response_.Content, cancellationToken).ConfigureAwait(false); + throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + protected struct ObjectResponseResult { public ObjectResponseResult(T responseObject, string responseText) diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_NewtonsoftJson_and_JsonSerializerSettingsTransformationMethod_then_output_contains_expected_code.verified.txt b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_NewtonsoftJson_and_JsonSerializerSettingsTransformationMethod_then_output_contains_expected_code.verified.txt index dae4f9f5c..5154ee328 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_NewtonsoftJson_and_JsonSerializerSettingsTransformationMethod_then_output_contains_expected_code.verified.txt +++ b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_NewtonsoftJson_and_JsonSerializerSettingsTransformationMethod_then_output_contains_expected_code.verified.txt @@ -124,6 +124,77 @@ namespace MyNamespace } } + public virtual System.Threading.Tasks.Task CreatePersonAsync(Person body) + { + return CreatePersonAsync(body, System.Threading.CancellationToken.None); + } + + public virtual async System.Threading.Tasks.Task CreatePersonAsync(Person body, System.Threading.CancellationToken cancellationToken) + { + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var json_ = Newtonsoft.Json.JsonConvert.SerializeObject(body, JsonSerializerSettings); + var content_ = new System.Net.Http.StringContent(json_); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + + var urlBuilder_ = new System.Text.StringBuilder(); + if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl); + // Operation Path: "CreatePerson" + urlBuilder_.Append("CreatePerson"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = new System.Collections.Generic.Dictionary>(); + foreach (var item_ in response_.Headers) + headers_[item_.Key] = item_.Value; + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + { + var responseData_ = response_.Content == null ? null : await ReadAsStringAsync(response_.Content, cancellationToken).ConfigureAwait(false); + throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + protected struct ObjectResponseResult { public ObjectResponseResult(T responseObject, string responseText) diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_and_GenerateJsonMethods_and_JsonConverters_then_ToJson_and_FromJson_contains_expected_code.verified.txt b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_and_GenerateJsonMethods_and_JsonConverters_then_ToJson_and_FromJson_contains_expected_code.verified.txt index 0c32808aa..915f0fc12 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_and_GenerateJsonMethods_and_JsonConverters_then_ToJson_and_FromJson_contains_expected_code.verified.txt +++ b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_and_GenerateJsonMethods_and_JsonConverters_then_ToJson_and_FromJson_contains_expected_code.verified.txt @@ -127,6 +127,75 @@ namespace MyNamespace } } + public virtual System.Threading.Tasks.Task CreatePersonAsync(Person body) + { + return CreatePersonAsync(body, System.Threading.CancellationToken.None); + } + + public virtual async System.Threading.Tasks.Task CreatePersonAsync(Person body, System.Threading.CancellationToken cancellationToken) + { + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = System.Net.Http.Json.JsonContent.Create(body, System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"), JsonSerializerSettings); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + + var urlBuilder_ = new System.Text.StringBuilder(); + if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl); + // Operation Path: "CreatePerson" + urlBuilder_.Append("CreatePerson"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = new System.Collections.Generic.Dictionary>(); + foreach (var item_ in response_.Headers) + headers_[item_.Key] = item_.Value; + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + { + var responseData_ = response_.Content == null ? null : await ReadAsStringAsync(response_.Content, cancellationToken).ConfigureAwait(false); + throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + protected struct ObjectResponseResult { public ObjectResponseResult(T responseObject, string responseText) diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_and_JsonConverters_then_output_contains_expected_code.verified.txt b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_and_JsonConverters_then_output_contains_expected_code.verified.txt index 71f1646f9..787655d15 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_and_JsonConverters_then_output_contains_expected_code.verified.txt +++ b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_and_JsonConverters_then_output_contains_expected_code.verified.txt @@ -127,6 +127,75 @@ namespace MyNamespace } } + public virtual System.Threading.Tasks.Task CreatePersonAsync(Person body) + { + return CreatePersonAsync(body, System.Threading.CancellationToken.None); + } + + public virtual async System.Threading.Tasks.Task CreatePersonAsync(Person body, System.Threading.CancellationToken cancellationToken) + { + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = System.Net.Http.Json.JsonContent.Create(body, System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"), JsonSerializerSettings); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + + var urlBuilder_ = new System.Text.StringBuilder(); + if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl); + // Operation Path: "CreatePerson" + urlBuilder_.Append("CreatePerson"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = new System.Collections.Generic.Dictionary>(); + foreach (var item_ in response_.Headers) + headers_[item_.Key] = item_.Value; + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + { + var responseData_ = response_.Content == null ? null : await ReadAsStringAsync(response_.Content, cancellationToken).ConfigureAwait(false); + throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + protected struct ObjectResponseResult { public ObjectResponseResult(T responseObject, string responseText) diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_and_JsonSerializerSettingsTransformationMethod_then_output_contains_expected_code.verified.txt b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_and_JsonSerializerSettingsTransformationMethod_then_output_contains_expected_code.verified.txt index 4cfb54c5b..8f5c35858 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_and_JsonSerializerSettingsTransformationMethod_then_output_contains_expected_code.verified.txt +++ b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_and_JsonSerializerSettingsTransformationMethod_then_output_contains_expected_code.verified.txt @@ -124,6 +124,75 @@ namespace MyNamespace } } + public virtual System.Threading.Tasks.Task CreatePersonAsync(Person body) + { + return CreatePersonAsync(body, System.Threading.CancellationToken.None); + } + + public virtual async System.Threading.Tasks.Task CreatePersonAsync(Person body, System.Threading.CancellationToken cancellationToken) + { + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = System.Net.Http.Json.JsonContent.Create(body, System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"), JsonSerializerSettings); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + + var urlBuilder_ = new System.Text.StringBuilder(); + if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl); + // Operation Path: "CreatePerson" + urlBuilder_.Append("CreatePerson"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = new System.Collections.Generic.Dictionary>(); + foreach (var item_ in response_.Headers) + headers_[item_.Key] = item_.Value; + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + { + var responseData_ = response_.Content == null ? null : await ReadAsStringAsync(response_.Content, cancellationToken).ConfigureAwait(false); + throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + protected struct ObjectResponseResult { public ObjectResponseResult(T responseObject, string responseText) diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_then_output_contains_expected_code.verified.txt b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_then_output_contains_expected_code.verified.txt index b5398fd04..0d8d861e1 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_then_output_contains_expected_code.verified.txt +++ b/src/NSwag.CodeGeneration.CSharp.Tests/Snapshots/CodeGenerationTests.When_generating_CSharp_code_with_SystemTextJson_then_output_contains_expected_code.verified.txt @@ -124,6 +124,75 @@ namespace MyNamespace } } + public virtual System.Threading.Tasks.Task CreatePersonAsync(Person body) + { + return CreatePersonAsync(body, System.Threading.CancellationToken.None); + } + + public virtual async System.Threading.Tasks.Task CreatePersonAsync(Person body, System.Threading.CancellationToken cancellationToken) + { + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = System.Net.Http.Json.JsonContent.Create(body, System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"), JsonSerializerSettings); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + + var urlBuilder_ = new System.Text.StringBuilder(); + if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl); + // Operation Path: "CreatePerson" + urlBuilder_.Append("CreatePerson"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = new System.Collections.Generic.Dictionary>(); + foreach (var item_ in response_.Headers) + headers_[item_.Key] = item_.Value; + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + { + var responseData_ = response_.Content == null ? null : await ReadAsStringAsync(response_.Content, cancellationToken).ConfigureAwait(false); + throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + protected struct ObjectResponseResult { public ObjectResponseResult(T responseObject, string responseText) diff --git a/src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid b/src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid index 00ba41876..3aabef5eb 100644 --- a/src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid +++ b/src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid @@ -220,9 +220,11 @@ {% elsif operation.HasPlainTextBodyParameter -%} var content_ = new System.Net.Http.StringContent({{ operation.ContentParameter.VariableName }}); content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("{{ operation.Consumes }}"); +{% elsif UseSystemTextJson -%} + var content_ = System.Net.Http.Json.JsonContent.Create({{ operation.ContentParameter.VariableName }}, System.Net.Http.Headers.MediaTypeHeaderValue.Parse("{{ operation.Consumes }}"), {% if UseRequestAndResponseSerializationSettings %}Request{% endif %}JsonSerializerSettings); {% else -%} - var json_ = {% if UseSystemTextJson %}System.Text.Json.JsonSerializer.SerializeToUtf8Bytes{% else %}Newtonsoft.Json.JsonConvert.SerializeObject{% endif %}({{ operation.ContentParameter.VariableName }}, {% if SerializeTypeInformation %}typeof({{ operation.ContentParameter.Type }}), {% endif %}{% if UseRequestAndResponseSerializationSettings %}Request{% endif %}JsonSerializerSettings); - var content_ = new System.Net.Http.{% if UseSystemTextJson %}ByteArrayContent{% else %}StringContent{% endif %}(json_); + var json_ = Newtonsoft.Json.JsonConvert.SerializeObject({{ operation.ContentParameter.VariableName }}, {% if SerializeTypeInformation %}typeof({{ operation.ContentParameter.Type }}), {% endif %}{% if UseRequestAndResponseSerializationSettings %}Request{% endif %}JsonSerializerSettings); + var content_ = new System.Net.Http.StringContent(json_); content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("{{ operation.Consumes }}"); {% endif -%} request_.Content = content_;