diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs index 05350c01f..0aed760d6 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs @@ -89,6 +89,31 @@ public async Task WhenUsingBaseUrl_ButNoProperty_ThenPropertyIsNotUsedAndFieldIs Assert.Contains("string _baseUrl", code); } + [Fact] + public async Task WhenUsingBaseUrl_ButNoPropertyWithBaseClass_ThenPropertyIsUsedAndFieldIsNotGenerated() + { + // Arrange + var swaggerGenerator = new WebApiOpenApiDocumentGenerator(new WebApiOpenApiDocumentGeneratorSettings + { + SchemaSettings = new NewtonsoftJsonSchemaGeneratorSettings() + }); + + var document = await swaggerGenerator.GenerateForControllerAsync(); + var generator = new CSharpClientGenerator(document, new CSharpClientGeneratorSettings + { + UseBaseUrl = true, + GenerateBaseUrlProperty = false, + ClientBaseClass = "MyBaseClass" + }); + + // Act + var code = generator.GenerateFile(); + + // Assert + Assert.Contains("BaseUrl", code); + Assert.DoesNotContain("string _baseUrl", code); + } + [Fact] public async Task When_parameter_name_is_reserved_keyword_then_it_is_appended_with_at() { diff --git a/src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid b/src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid index d774f0c82..7b4c957ed 100644 --- a/src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid +++ b/src/NSwag.CodeGeneration.CSharp/Templates/Client.Class.liquid @@ -3,10 +3,12 @@ {{ ClientClassAccessModifier }} partial class {{ Class }} {% if HasBaseType %}: {% endif %}{% if HasBaseClass %}{{ BaseClass }}{% if GenerateClientInterfaces %}, {% endif %}{% endif %}{% if GenerateClientInterfaces %}I{{ Class }}{% endif %} { {% if UseBaseUrl -%} +{% if HasBaseClass == false or GenerateBaseUrlProperty == true -%} #pragma warning disable 8618 private string _baseUrl; #pragma warning restore 8618 +{% endif -%} {% endif -%} {% if InjectHttpClient -%} private {{ HttpClientType }} _httpClient; @@ -34,7 +36,7 @@ public {{ Class }}({{ constructorParameters }}){% if HasConfigurationClass and HasBaseClass -%}{{ " : base(configuration)"}}{% endif %} #pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. { -{% if UseBaseUrl -%} +{% if UseBaseUrl and HasBaseClass == false and GenerateBaseUrlProperty == true -%} {% if HasBaseUrl -%} {% if GenerateBaseUrlProperty -%} BaseUrl = "{{ BaseUrl }}"; @@ -290,7 +292,11 @@ {% endif -%} var urlBuilder_ = new System.Text.StringBuilder(); - {% if UseBaseUrl %}if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl);{% endif %} +{% if HasBaseClass == true and GenerateBaseUrlProperty == false -%} + if (!string.IsNullOrEmpty(BaseUrl)) urlBuilder_.Append(BaseUrl); +{% else -%} + if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl); +{% endif -%} // Operation Path: "{{ operation.Path }}" {% if operation.Path contains "{" -%} {% assign pathParts = operation.Path | split: "{" -%}