diff --git a/.github/workflows/openapi-generator.yaml b/.github/workflows/openapi-generator.yaml
index 77f71dce957..45baea95da7 100644
--- a/.github/workflows/openapi-generator.yaml
+++ b/.github/workflows/openapi-generator.yaml
@@ -154,13 +154,21 @@ jobs:
rm -rf samples/client/petstore/csharp/generichost/standard2.0/Petstore
- rm -rf samples/client/petstore/csharp/generichost/net8/AllOf
- rm -rf samples/client/petstore/csharp/generichost/net8/AnyOf
- rm -rf samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare
- rm -rf samples/client/petstore/csharp/generichost/net8/FormModels
- rm -rf samples/client/petstore/csharp/generichost/net8/OneOf
- rm -rf samples/client/petstore/csharp/generichost/net8/Petstore
- rm -rf samples/client/petstore/csharp/generichost/net8/UseDateTimeForDate
+ rm -rf samples/client/petstore/csharp/generichost/net4.8/AllOf
+ rm -rf samples/client/petstore/csharp/generichost/net4.8/AnyOf
+ rm -rf samples/client/petstore/csharp/generichost/net4.8/AnyOfNoCompare
+ rm -rf samples/client/petstore/csharp/generichost/net4.8/FormModels
+ rm -rf samples/client/petstore/csharp/generichost/net4.8/OneOf
+ rm -rf samples/client/petstore/csharp/generichost/net4.8/Petstore
+ rm -rf samples/client/petstore/csharp/generichost/net4.8/UseDateTimeForDate
+
+ rm -rf samples/client/petstore/csharp/generichost/net4.7/AllOf
+ rm -rf samples/client/petstore/csharp/generichost/net4.7/AnyOf
+ rm -rf samples/client/petstore/csharp/generichost/net4.7/AnyOfNoCompare
+ rm -rf samples/client/petstore/csharp/generichost/net4.7/FormModels
+ rm -rf samples/client/petstore/csharp/generichost/net4.7/OneOf
+ rm -rf samples/client/petstore/csharp/generichost/net4.7/Petstore
+ rm -rf samples/client/petstore/csharp/generichost/net4.7/UseDateTimeForDate
- name: Generate samples
run: |
bash bin/generate-samples.sh
diff --git a/.github/workflows/samples-dotnet-net47.yaml b/.github/workflows/samples-dotnet-net47.yaml
index 932326d79f9..060faeba89e 100644
--- a/.github/workflows/samples-dotnet-net47.yaml
+++ b/.github/workflows/samples-dotnet-net47.yaml
@@ -22,6 +22,14 @@ jobs:
- samples/client/petstore/csharp/generichost/net4.7/OneOf
- samples/client/petstore/csharp/generichost/net4.7/Petstore
- samples/client/petstore/csharp/generichost/net4.7/UseDateTimeForDate
+
+ - samples/client/petstore/csharp/generichost/net4.8/AllOf
+ - samples/client/petstore/csharp/generichost/net4.8/AnyOf
+ - samples/client/petstore/csharp/generichost/net4.8/AnyOfNoCompare
+ - samples/client/petstore/csharp/generichost/net4.8/FormModels
+ - samples/client/petstore/csharp/generichost/net4.8/OneOf
+ - samples/client/petstore/csharp/generichost/net4.8/Petstore
+ - samples/client/petstore/csharp/generichost/net4.8/UseDateTimeForDate
steps:
- uses: actions/checkout@v4
- name: Build
diff --git a/appveyor.yml b/appveyor.yml
index 34e0a2a14d2..ae17c012c1f 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -57,13 +57,21 @@ test_script:
- dotnet test samples\client\petstore\csharp\generichost\standard2.0\Petstore\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
- - dotnet test samples\client\petstore\csharp\generichost\net8\AllOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
- - dotnet test samples\client\petstore\csharp\generichost\net8\AnyOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
- - dotnet test samples\client\petstore\csharp\generichost\net8\AnyOfNoCompare\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
- - dotnet test samples\client\petstore\csharp\generichost\net8\FormModels\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
- - dotnet test samples\client\petstore\csharp\generichost\net8\OneOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
- - dotnet test samples\client\petstore\csharp\generichost\net8\Petstore\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
- - dotnet test samples\client\petstore\csharp\generichost\net8\UseDateTimeForDate\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.8\AllOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.8\AnyOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.8\AnyOfNoCompare\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.8\FormModels\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.8\OneOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.8\Petstore\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.8\UseDateTimeForDate\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+
+ - dotnet test samples\client\petstore\csharp\generichost\net4.7\AllOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.7\AnyOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.7\AnyOfNoCompare\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.7\FormModels\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.7\OneOf\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.7\Petstore\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
+ - dotnet test samples\client\petstore\csharp\generichost\net4.7\UseDateTimeForDate\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
- dotnet test samples\client\petstore\csharp\httpclient\standard2.0\Petstore\src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj
diff --git a/bin/configs/csharp-generichost-net4.8-allOf.yaml b/bin/configs/csharp-generichost-net4.8-allOf.yaml
new file mode 100644
index 00000000000..3618129e933
--- /dev/null
+++ b/bin/configs/csharp-generichost-net4.8-allOf.yaml
@@ -0,0 +1,13 @@
+# for csharp generichost
+generatorName: csharp
+outputDir: samples/client/petstore/csharp/generichost/net4.8/AllOf
+inputSpec: modules/openapi-generator/src/test/resources/3_0/allOf.yaml
+library: generichost
+templateDir: modules/openapi-generator/src/main/resources/csharp
+additionalProperties:
+ packageGuid: '{321C8C3F-0156-40C1-AE42-D59761FB9B6C}'
+ useCompareNetObjects: true
+ disallowAdditionalPropertiesIfNotPresent: false
+ nullableReferenceTypes: false
+ equatable: true
+ targetFramework: net48
diff --git a/bin/configs/csharp-generichost-net4.8-anyOf.yaml b/bin/configs/csharp-generichost-net4.8-anyOf.yaml
new file mode 100644
index 00000000000..846d3957b55
--- /dev/null
+++ b/bin/configs/csharp-generichost-net4.8-anyOf.yaml
@@ -0,0 +1,13 @@
+# for csharp generichost
+generatorName: csharp
+outputDir: samples/client/petstore/csharp/generichost/net4.8/AnyOf
+inputSpec: modules/openapi-generator/src/test/resources/3_0/anyOf.yaml
+library: generichost
+templateDir: modules/openapi-generator/src/main/resources/csharp
+additionalProperties:
+ packageGuid: '{321C8C3F-0156-40C1-AE42-D59761FB9B6C}'
+ useCompareNetObjects: true
+ disallowAdditionalPropertiesIfNotPresent: false
+ nullableReferenceTypes: false
+ equatable: true
+ targetFramework: net48
diff --git a/bin/configs/csharp-generichost-net4.8-anyOfNoCompare.yaml b/bin/configs/csharp-generichost-net4.8-anyOfNoCompare.yaml
new file mode 100644
index 00000000000..760f3cc0ed9
--- /dev/null
+++ b/bin/configs/csharp-generichost-net4.8-anyOfNoCompare.yaml
@@ -0,0 +1,13 @@
+# for csharp generichost
+generatorName: csharp
+outputDir: samples/client/petstore/csharp/generichost/net4.8/AnyOfNoCompare
+inputSpec: modules/openapi-generator/src/test/resources/3_0/anyOf.yaml
+library: generichost
+templateDir: modules/openapi-generator/src/main/resources/csharp
+additionalProperties:
+ packageGuid: '{321C8C3F-0156-40C1-AE42-D59761FB9B6C}'
+ useCompareNetObjects: false
+ disallowAdditionalPropertiesIfNotPresent: false
+ nullableReferenceTypes: false
+ equatable: true
+ targetFramework: net48
diff --git a/bin/configs/csharp-generichost-net4.8-formModels.yaml b/bin/configs/csharp-generichost-net4.8-formModels.yaml
new file mode 100644
index 00000000000..5617bc8f801
--- /dev/null
+++ b/bin/configs/csharp-generichost-net4.8-formModels.yaml
@@ -0,0 +1,16 @@
+# for csharp generichost
+generatorName: csharp
+outputDir: samples/client/petstore/csharp/generichost/net4.8/FormModels
+inputSpec: modules/openapi-generator/src/test/resources/3_0/csharp/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml
+library: generichost
+templateDir: modules/openapi-generator/src/main/resources/csharp
+additionalProperties:
+ packageGuid: '{321C8C3F-0156-40C1-AE42-D59761FB9B6C}'
+ useCompareNetObjects: true
+ disallowAdditionalPropertiesIfNotPresent: false
+ nullableReferenceTypes: false
+ equatable: true
+ targetFramework: net48
+ skipFormModel: false
+inlineSchemaOptions:
+ RESOLVE_INLINE_ENUMS: true
diff --git a/bin/configs/csharp-generichost-net4.8-oneOf.yaml b/bin/configs/csharp-generichost-net4.8-oneOf.yaml
new file mode 100644
index 00000000000..89f61765db6
--- /dev/null
+++ b/bin/configs/csharp-generichost-net4.8-oneOf.yaml
@@ -0,0 +1,13 @@
+# for csharp generichost
+generatorName: csharp
+outputDir: samples/client/petstore/csharp/generichost/net4.8/OneOf
+inputSpec: modules/openapi-generator/src/test/resources/3_0/oneOf.yaml
+library: generichost
+templateDir: modules/openapi-generator/src/main/resources/csharp
+additionalProperties:
+ packageGuid: '{321C8C3F-0156-40C1-AE42-D59761FB9B6C}'
+ useCompareNetObjects: true
+ disallowAdditionalPropertiesIfNotPresent: false
+ nullableReferenceTypes: false
+ equatable: true
+ targetFramework: net48
diff --git a/bin/configs/csharp-generichost-net4.8-useDateTimeForDate.yaml b/bin/configs/csharp-generichost-net4.8-useDateTimeForDate.yaml
new file mode 100644
index 00000000000..d8e9842364e
--- /dev/null
+++ b/bin/configs/csharp-generichost-net4.8-useDateTimeForDate.yaml
@@ -0,0 +1,10 @@
+# for csharp generichost
+generatorName: csharp
+outputDir: samples/client/petstore/csharp/generichost/net4.8/UseDateTimeForDate
+inputSpec: modules/openapi-generator/src/test/resources/3_0/csharp/dates-api.yaml
+library: generichost
+templateDir: modules/openapi-generator/src/main/resources/csharp
+additionalProperties:
+ packageGuid: '{2E60EF87-DB0B-4D01-A36E-F5E90F7EC757}'
+ useDateTimeForDate: true
+ targetFramework: net48
diff --git a/bin/configs/csharp-generichost-net4.8.yaml b/bin/configs/csharp-generichost-net4.8.yaml
new file mode 100644
index 00000000000..113eed1a558
--- /dev/null
+++ b/bin/configs/csharp-generichost-net4.8.yaml
@@ -0,0 +1,13 @@
+# for csharp generichost
+generatorName: csharp
+outputDir: samples/client/petstore/csharp/generichost/net4.8/Petstore
+inputSpec: modules/openapi-generator/src/test/resources/3_0/csharp/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml
+library: generichost
+templateDir: modules/openapi-generator/src/main/resources/csharp
+additionalProperties:
+ packageGuid: '{321C8C3F-0156-40C1-AE42-D59761FB9B6C}'
+ useCompareNetObjects: true
+ disallowAdditionalPropertiesIfNotPresent: false
+ nullableReferenceTypes: false
+ equatable: true
+ targetFramework: net48
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/.gitignore b/samples/client/petstore/csharp/generichost/net4.8/AllOf/.gitignore
new file mode 100644
index 00000000000..1ee53850b84
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/.gitignore
@@ -0,0 +1,362 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
+
+# Fody - auto-generated XML schema
+FodyWeavers.xsd
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator-ignore b/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator-ignore
new file mode 100644
index 00000000000..7484ee590a3
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator-ignore
@@ -0,0 +1,23 @@
+# OpenAPI Generator Ignore
+# Generated by openapi-generator https://github.com/openapitools/openapi-generator
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator/FILES
new file mode 100644
index 00000000000..47b2b9b5c4f
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator/FILES
@@ -0,0 +1,40 @@
+.gitignore
+Org.OpenAPITools.sln
+README.md
+api/openapi.yaml
+appveyor.yml
+docs/apis/DefaultApi.md
+docs/models/Adult.md
+docs/models/Child.md
+docs/models/Person.md
+docs/scripts/git_push.ps1
+docs/scripts/git_push.sh
+src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs
+src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj
+src/Org.OpenAPITools.Test/README.md
+src/Org.OpenAPITools/Api/DefaultApi.cs
+src/Org.OpenAPITools/Api/IApi.cs
+src/Org.OpenAPITools/Client/ApiException.cs
+src/Org.OpenAPITools/Client/ApiFactory.cs
+src/Org.OpenAPITools/Client/ApiResponseEventArgs.cs
+src/Org.OpenAPITools/Client/ApiResponse`1.cs
+src/Org.OpenAPITools/Client/ClientUtils.cs
+src/Org.OpenAPITools/Client/CookieContainer.cs
+src/Org.OpenAPITools/Client/DateTimeJsonConverter.cs
+src/Org.OpenAPITools/Client/DateTimeNullableJsonConverter.cs
+src/Org.OpenAPITools/Client/ExceptionEventArgs.cs
+src/Org.OpenAPITools/Client/HostConfiguration.cs
+src/Org.OpenAPITools/Client/JsonSerializerOptionsProvider.cs
+src/Org.OpenAPITools/Client/Option.cs
+src/Org.OpenAPITools/Client/RateLimitProvider`1.cs
+src/Org.OpenAPITools/Client/TokenBase.cs
+src/Org.OpenAPITools/Client/TokenContainer`1.cs
+src/Org.OpenAPITools/Client/TokenProvider`1.cs
+src/Org.OpenAPITools/Extensions/IHostBuilderExtensions.cs
+src/Org.OpenAPITools/Extensions/IHttpClientBuilderExtensions.cs
+src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs
+src/Org.OpenAPITools/Model/Adult.cs
+src/Org.OpenAPITools/Model/Child.cs
+src/Org.OpenAPITools/Model/Person.cs
+src/Org.OpenAPITools/Org.OpenAPITools.csproj
+src/Org.OpenAPITools/README.md
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator/VERSION
new file mode 100644
index 00000000000..7e7b8b9bc73
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/.openapi-generator/VERSION
@@ -0,0 +1 @@
+7.7.0-SNAPSHOT
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/Org.OpenAPITools.sln b/samples/client/petstore/csharp/generichost/net4.8/AllOf/Org.OpenAPITools.sln
new file mode 100644
index 00000000000..5b15451c9dc
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/Org.OpenAPITools.sln
@@ -0,0 +1,27 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+VisualStudioVersion = 12.0.0.0
+MinimumVisualStudioVersion = 10.0.0.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.OpenAPITools", "src\Org.OpenAPITools\Org.OpenAPITools.csproj", "{321C8C3F-0156-40C1-AE42-D59761FB9B6C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.OpenAPITools.Test", "src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj", "{19F1DEBC-DE5E-4517-8062-F000CD499087}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/README.md b/samples/client/petstore/csharp/generichost/net4.8/AllOf/README.md
new file mode 100644
index 00000000000..f9c1c7f7462
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/README.md
@@ -0,0 +1 @@
+# Created with Openapi Generator
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net4.8/AllOf/api/openapi.yaml
new file mode 100644
index 00000000000..a6144ccdba8
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/api/openapi.yaml
@@ -0,0 +1,71 @@
+openapi: 3.0.1
+info:
+ license:
+ name: MIT
+ title: Example
+ version: 1.0.0
+servers:
+- url: http://api.example.xyz/v1
+paths:
+ /person/display/{personId}:
+ get:
+ operationId: list
+ parameters:
+ - description: The id of the person to retrieve
+ explode: false
+ in: path
+ name: personId
+ required: true
+ schema:
+ type: string
+ style: simple
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Person'
+ description: OK
+components:
+ schemas:
+ Person:
+ discriminator:
+ mapping:
+ a: '#/components/schemas/Adult'
+ c: Child
+ propertyName: $_type
+ example:
+ lastName: lastName
+ firstName: firstName
+ $_type: $_type
+ properties:
+ $_type:
+ type: string
+ lastName:
+ type: string
+ firstName:
+ type: string
+ type: object
+ Adult:
+ allOf:
+ - $ref: '#/components/schemas/Person'
+ - properties:
+ children:
+ items:
+ $ref: '#/components/schemas/Child'
+ type: array
+ type: object
+ description: A representation of an adult
+ Child:
+ allOf:
+ - properties:
+ age:
+ format: int32
+ type: integer
+ type: object
+ - $ref: '#/components/schemas/Person'
+ description: A representation of a child
+ properties:
+ boosterSeat:
+ type: boolean
+
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/appveyor.yml b/samples/client/petstore/csharp/generichost/net4.8/AllOf/appveyor.yml
new file mode 100644
index 00000000000..f76f63cee50
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/appveyor.yml
@@ -0,0 +1,9 @@
+# auto-generated by OpenAPI Generator (https://github.com/OpenAPITools/openapi-generator)
+#
+image: Visual Studio 2019
+clone_depth: 1
+build_script:
+- dotnet build -c Release
+- dotnet test -c Release
+after_build:
+- dotnet pack .\src\Org.OpenAPITools\Org.OpenAPITools.csproj -o ../../output -c Release --no-build
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/apis/DefaultApi.md
new file mode 100644
index 00000000000..c203cd813bb
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/apis/DefaultApi.md
@@ -0,0 +1,95 @@
+# Org.OpenAPITools.Api.DefaultApi
+
+All URIs are relative to *http://api.example.xyz/v1*
+
+| Method | HTTP request | Description |
+|--------|--------------|-------------|
+| [**List**](DefaultApi.md#list) | **GET** /person/display/{personId} | |
+
+
+# **List**
+> Person List (string personId)
+
+
+
+### Example
+```csharp
+using System.Collections.Generic;
+using System.Diagnostics;
+using Org.OpenAPITools.Api;
+using Org.OpenAPITools.Client;
+using Org.OpenAPITools.Model;
+
+namespace Example
+{
+ public class ListExample
+ {
+ public static void Main()
+ {
+ Configuration config = new Configuration();
+ config.BasePath = "http://api.example.xyz/v1";
+ var apiInstance = new DefaultApi(config);
+ var personId = "personId_example"; // string | The id of the person to retrieve
+
+ try
+ {
+ Person result = apiInstance.List(personId);
+ Debug.WriteLine(result);
+ }
+ catch (ApiException e)
+ {
+ Debug.Print("Exception when calling DefaultApi.List: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+ }
+ }
+ }
+}
+```
+
+#### Using the ListWithHttpInfo variant
+This returns an ApiResponse object which contains the response data, status code and headers.
+
+```csharp
+try
+{
+ ApiResponse response = apiInstance.ListWithHttpInfo(personId);
+ Debug.Write("Status Code: " + response.StatusCode);
+ Debug.Write("Response Headers: " + response.Headers);
+ Debug.Write("Response Body: " + response.Data);
+}
+catch (ApiException e)
+{
+ Debug.Print("Exception when calling DefaultApi.ListWithHttpInfo: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------|------|-------------|-------|
+| **personId** | **string** | The id of the person to retrieve | |
+
+### Return type
+
+[**Person**](Person.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | OK | - |
+
+[[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/generichost/net4.8/AllOf/docs/models/Adult.md b/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/models/Adult.md
new file mode 100644
index 00000000000..4bf74e4efc9
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/models/Adult.md
@@ -0,0 +1,14 @@
+# Org.OpenAPITools.Model.Adult
+A representation of an adult
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**FirstName** | **string** | | [optional]
+**LastName** | **string** | | [optional]
+**Type** | **string** | | [optional]
+**Children** | [**List<Child>**](Child.md) | | [optional]
+
+[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md)
+
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/models/Child.md b/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/models/Child.md
new file mode 100644
index 00000000000..bb2a1e5a561
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/models/Child.md
@@ -0,0 +1,15 @@
+# Org.OpenAPITools.Model.Child
+A representation of a child
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**FirstName** | **string** | | [optional]
+**LastName** | **string** | | [optional]
+**Type** | **string** | | [optional]
+**Age** | **int** | | [optional]
+**BoosterSeat** | **bool** | | [optional]
+
+[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md)
+
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/models/Person.md b/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/models/Person.md
new file mode 100644
index 00000000000..42c19689f9a
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/models/Person.md
@@ -0,0 +1,12 @@
+# Org.OpenAPITools.Model.Person
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**FirstName** | **string** | | [optional]
+**LastName** | **string** | | [optional]
+**Type** | **string** | | [optional]
+
+[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md)
+
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/scripts/git_push.ps1 b/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/scripts/git_push.ps1
new file mode 100644
index 00000000000..73ed35c2bb1
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/scripts/git_push.ps1
@@ -0,0 +1,75 @@
+param(
+ [Parameter()][Alias("g")][String]$GitHost = "github.com",
+ [Parameter()][Alias("u")][String]$GitUserId = "GIT_USER_ID",
+ [Parameter()][Alias("r")][String]$GitRepoId = "GIT_REPO_ID",
+ [Parameter()][Alias("m")][string]$Message = "Minor update",
+ [Parameter()][Alias("h")][switch]$Help
+)
+
+function Publish-ToGitHost{
+ if ([string]::IsNullOrWhiteSpace($Message) -or $Message -eq "Minor update"){
+ # it seems unlikely that we would want our git commit message to be the default, so lets prompt the user
+ $Message = Read-Host -Prompt "Please provide a commit message or press enter"
+ $Message = if([string]::IsNullOrWhiteSpace($Message)) { "no message provided" } else { $Message }
+ }
+
+ git init
+ git add .
+ git commit -am "${Message}"
+ $branchName=$(git rev-parse --abbrev-ref HEAD)
+ $gitRemote=$(git remote)
+
+ if([string]::IsNullOrWhiteSpace($gitRemote)){
+ git remote add origin https://${GitHost}/${GitUserId}/${GitRepoId}.git
+ }
+
+ Write-Output "Pulling from https://${GitHost}/${GitUserId}/${GitRepoId}.git"
+ git pull origin $branchName --ff-only
+
+ if ($LastExitCode -ne 0){
+ if (${GitHost} -eq "github.com"){
+ Write-Output "The ${GitRepoId} repository may not exist yet. Creating it now with the GitHub CLI."
+ gh auth login --hostname github.com --web
+ gh repo create $GitRepoId --private
+ # sleep 2 seconds to ensure git finishes creation of the repo
+ Start-Sleep -Seconds 2
+ }
+ else{
+ throw "There was an issue pulling the origin branch. The remote repository may not exist yet."
+ }
+ }
+
+ Write-Output "Pushing to https://${GitHost}/${GitUserId}/${GitRepoId}.git"
+ git push origin $branchName
+}
+
+$ErrorActionPreference = "Stop"
+Set-StrictMode -Version 3.0
+
+if ($Help){
+ Write-Output "
+ This script will initialize a git repository, then add and commit all files.
+ The local repository will then be pushed to your preferred git provider.
+ If the remote repository does not exist yet and you are using GitHub,
+ the repository will be created for you provided you have the GitHub CLI installed.
+
+ Parameters:
+ -g | -GitHost -> ex: github.com
+ -m | -Message -> the git commit message
+ -r | -GitRepoId -> the name of the repository
+ -u | -GitUserId -> your user id
+ "
+
+ return
+}
+
+$rootPath=Resolve-Path -Path $PSScriptRoot/../..
+
+Push-Location $rootPath
+
+try {
+ Publish-ToGitHost $GitHost $GitUserId $GitRepoId $Message
+}
+finally{
+ Pop-Location
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/scripts/git_push.sh b/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/scripts/git_push.sh
new file mode 100644
index 00000000000..88210492218
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/docs/scripts/git_push.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
+#
+# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
+
+git_user_id=${1:-GIT_USER_ID}
+git_repo_id=${2:-GIT_REPO_ID}
+release_note=${3:-Minor update}
+git_host=${4:-github.com}
+
+starting_directory=$(pwd)
+script_root="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+cd $script_root
+cd ../..
+
+if [ "$release_note" = "" ] || [ "$release_note" = "Minor update" ]; then
+ # it seems unlikely that we would want our git commit message to be the default, so lets prompt the user
+ echo "Please provide a commit message or press enter"
+ read user_input
+ release_note=$user_input
+ if [ "$release_note" = "" ]; then
+ release_note="no message provided"
+ fi
+fi
+
+git init
+git add .
+git commit -am "$release_note"
+branch_name=$(git rev-parse --abbrev-ref HEAD)
+git_remote=$(git remote)
+
+if [ "$git_remote" = "" ]; then # git remote not defined
+
+ if [ "$GIT_TOKEN" = "" ]; then
+ echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
+ git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
+ else
+ git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
+ fi
+
+fi
+
+echo "[INFO] Pulling from https://${git_host}/${git_user_id}/${git_repo_id}.git"
+git pull origin $branch_name --ff-only
+
+echo "[INFO] Pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
+git push origin $branch_name
+
+cd $starting_directory
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Api/ApiTestsBase.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Api/ApiTestsBase.cs
new file mode 100644
index 00000000000..5dd80394d3f
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Api/ApiTestsBase.cs
@@ -0,0 +1,58 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Security.Cryptography;
+using Microsoft.Extensions.Hosting;
+using Org.OpenAPITools.Client;
+using Org.OpenAPITools.Extensions;
+
+
+/* *********************************************************************************
+* Follow these manual steps to construct tests.
+* This file will not be overwritten.
+* *********************************************************************************
+* 1. Navigate to ApiTests.Base.cs and ensure any tokens are being created correctly.
+* Take care not to commit credentials to any repository.
+*
+* 2. Mocking is coordinated by ApiTestsBase#AddApiHttpClients.
+* To mock the client, use the generic AddApiHttpClients.
+* To mock the server, change the client's BaseAddress.
+*
+* 3. Locate the test you want below
+* - remove the skip property from the Fact attribute
+* - set the value of any variables if necessary
+*
+* 4. Run the tests and ensure they work.
+*
+*/
+
+
+namespace Org.OpenAPITools.Test.Api
+{
+ ///
+ /// Base class for API tests
+ ///
+ public class ApiTestsBase
+ {
+ protected readonly IHost _host;
+
+ public ApiTestsBase(string[] args)
+ {
+ _host = CreateHostBuilder(args).Build();
+ }
+
+ public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
+ .ConfigureApi((context, services, options) =>
+ {
+
+ });
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Api/DefaultApiTests.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Api/DefaultApiTests.cs
new file mode 100644
index 00000000000..8181a987b5f
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Api/DefaultApiTests.cs
@@ -0,0 +1,65 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Xunit;
+using Microsoft.Extensions.DependencyInjection;
+using Org.OpenAPITools.Api;
+using Org.OpenAPITools.Model;
+
+
+/* *********************************************************************************
+* Follow these manual steps to construct tests.
+* This file will not be overwritten.
+* *********************************************************************************
+* 1. Navigate to ApiTests.Base.cs and ensure any tokens are being created correctly.
+* Take care not to commit credentials to any repository.
+*
+* 2. Mocking is coordinated by ApiTestsBase#AddApiHttpClients.
+* To mock the client, use the generic AddApiHttpClients.
+* To mock the server, change the client's BaseAddress.
+*
+* 3. Locate the test you want below
+* - remove the skip property from the Fact attribute
+* - set the value of any variables if necessary
+*
+* 4. Run the tests and ensure they work.
+*
+*/
+
+
+namespace Org.OpenAPITools.Test.Api
+{
+ ///
+ /// Class for testing DefaultApi
+ ///
+ public sealed class DefaultApiTests : ApiTestsBase
+ {
+ private readonly IDefaultApi _instance;
+
+ public DefaultApiTests(): base(Array.Empty())
+ {
+ _instance = _host.Services.GetRequiredService();
+ }
+
+ ///
+ /// Test List
+ ///
+ [Fact (Skip = "not implemented")]
+ public async Task ListAsyncTest()
+ {
+ string personId = default;
+ var response = await _instance.ListAsync(personId);
+ var model = response.Ok();
+ Assert.IsType(model);
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs
new file mode 100644
index 00000000000..470d080ffd6
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs
@@ -0,0 +1,103 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.DependencyInjection;
+using System.Collections.Generic;
+using System.Security.Cryptography;
+using Org.OpenAPITools.Client;
+using Org.OpenAPITools.Api;
+using Org.OpenAPITools.Extensions;
+using Xunit;
+
+namespace Org.OpenAPITools.Test.Api
+{
+ ///
+ /// Tests the dependency injection.
+ ///
+ public class DependencyInjectionTest
+ {
+ private readonly IHost _hostUsingConfigureWithoutAClient =
+ Host.CreateDefaultBuilder(Array.Empty()).ConfigureApi((context, services, options) =>
+ {
+
+ })
+ .Build();
+
+ private readonly IHost _hostUsingConfigureWithAClient =
+ Host.CreateDefaultBuilder(Array.Empty()).ConfigureApi((context, services, options) =>
+ {
+
+ options.AddApiHttpClients(client => client.BaseAddress = new Uri(ClientUtils.BASE_ADDRESS));
+ })
+ .Build();
+
+ private readonly IHost _hostUsingAddWithoutAClient =
+ Host.CreateDefaultBuilder(Array.Empty()).ConfigureServices((host, services) =>
+ {
+ services.AddApi(options =>
+ {
+
+ });
+ })
+ .Build();
+
+ private readonly IHost _hostUsingAddWithAClient =
+ Host.CreateDefaultBuilder(Array.Empty()).ConfigureServices((host, services) =>
+ {
+ services.AddApi(options =>
+ {
+
+ options.AddApiHttpClients(client => client.BaseAddress = new Uri(ClientUtils.BASE_ADDRESS));
+ });
+ })
+ .Build();
+
+ ///
+ /// Test dependency injection when using the configure method
+ ///
+ [Fact]
+ public void ConfigureApiWithAClientTest()
+ {
+ var defaultApi = _hostUsingConfigureWithAClient.Services.GetRequiredService();
+ Assert.True(defaultApi.HttpClient.BaseAddress != null);
+ }
+
+ ///
+ /// Test dependency injection when using the configure method
+ ///
+ [Fact]
+ public void ConfigureApiWithoutAClientTest()
+ {
+ var defaultApi = _hostUsingConfigureWithoutAClient.Services.GetRequiredService();
+ Assert.True(defaultApi.HttpClient.BaseAddress != null);
+ }
+
+ ///
+ /// Test dependency injection when using the add method
+ ///
+ [Fact]
+ public void AddApiWithAClientTest()
+ {
+ var defaultApi = _hostUsingAddWithAClient.Services.GetRequiredService();
+ Assert.True(defaultApi.HttpClient.BaseAddress != null);
+ }
+
+ ///
+ /// Test dependency injection when using the add method
+ ///
+ [Fact]
+ public void AddApiWithoutAClientTest()
+ {
+ var defaultApi = _hostUsingAddWithoutAClient.Services.GetRequiredService();
+ Assert.True(defaultApi.HttpClient.BaseAddress != null);
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Model/AdultTests.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Model/AdultTests.cs
new file mode 100644
index 00000000000..31079eac974
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Model/AdultTests.cs
@@ -0,0 +1,65 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+
+using Xunit;
+
+using System;
+using System.Linq;
+using System.IO;
+using System.Collections.Generic;
+using Org.OpenAPITools.Model;
+using Org.OpenAPITools.Client;
+using System.Reflection;
+
+namespace Org.OpenAPITools.Test.Model
+{
+ ///
+ /// Class for testing Adult
+ ///
+ ///
+ /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech).
+ /// Please update the test case below to test the model.
+ ///
+ public class AdultTests : IDisposable
+ {
+ // TODO uncomment below to declare an instance variable for Adult
+ //private Adult instance;
+
+ public AdultTests()
+ {
+ // TODO uncomment below to create an instance of Adult
+ //instance = new Adult();
+ }
+
+ public void Dispose()
+ {
+ // Cleanup when everything is done.
+ }
+
+ ///
+ /// Test an instance of Adult
+ ///
+ [Fact]
+ public void AdultInstanceTest()
+ {
+ // TODO uncomment below to test "IsType" Adult
+ //Assert.IsType(instance);
+ }
+
+ ///
+ /// Test the property 'Children'
+ ///
+ [Fact]
+ public void ChildrenTest()
+ {
+ // TODO unit test for the property 'Children'
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Model/ChildTests.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Model/ChildTests.cs
new file mode 100644
index 00000000000..17720f6e735
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Model/ChildTests.cs
@@ -0,0 +1,74 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+
+using Xunit;
+
+using System;
+using System.Linq;
+using System.IO;
+using System.Collections.Generic;
+using Org.OpenAPITools.Model;
+using Org.OpenAPITools.Client;
+using System.Reflection;
+
+namespace Org.OpenAPITools.Test.Model
+{
+ ///
+ /// Class for testing Child
+ ///
+ ///
+ /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech).
+ /// Please update the test case below to test the model.
+ ///
+ public class ChildTests : IDisposable
+ {
+ // TODO uncomment below to declare an instance variable for Child
+ //private Child instance;
+
+ public ChildTests()
+ {
+ // TODO uncomment below to create an instance of Child
+ //instance = new Child();
+ }
+
+ public void Dispose()
+ {
+ // Cleanup when everything is done.
+ }
+
+ ///
+ /// Test an instance of Child
+ ///
+ [Fact]
+ public void ChildInstanceTest()
+ {
+ // TODO uncomment below to test "IsType" Child
+ //Assert.IsType(instance);
+ }
+
+ ///
+ /// Test the property 'Age'
+ ///
+ [Fact]
+ public void AgeTest()
+ {
+ // TODO unit test for the property 'Age'
+ }
+
+ ///
+ /// Test the property 'BoosterSeat'
+ ///
+ [Fact]
+ public void BoosterSeatTest()
+ {
+ // TODO unit test for the property 'BoosterSeat'
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Model/PersonTests.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Model/PersonTests.cs
new file mode 100644
index 00000000000..aa3fc482188
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Model/PersonTests.cs
@@ -0,0 +1,103 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+
+using Xunit;
+
+using System;
+using System.Linq;
+using System.IO;
+using System.Collections.Generic;
+using Org.OpenAPITools.Model;
+using Org.OpenAPITools.Client;
+using System.Reflection;
+
+namespace Org.OpenAPITools.Test.Model
+{
+ ///
+ /// Class for testing Person
+ ///
+ ///
+ /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech).
+ /// Please update the test case below to test the model.
+ ///
+ public class PersonTests : IDisposable
+ {
+ // TODO uncomment below to declare an instance variable for Person
+ //private Person instance;
+
+ public PersonTests()
+ {
+ // TODO uncomment below to create an instance of Person
+ //instance = new Person();
+ }
+
+ public void Dispose()
+ {
+ // Cleanup when everything is done.
+ }
+
+ ///
+ /// Test an instance of Person
+ ///
+ [Fact]
+ public void PersonInstanceTest()
+ {
+ // TODO uncomment below to test "IsType" Person
+ //Assert.IsType(instance);
+ }
+
+ ///
+ /// Test deserialize a Adult from type Person
+ ///
+ [Fact]
+ public void AdultDeserializeFromPersonTest()
+ {
+ // TODO uncomment below to test deserialize a Adult from type Person
+ //Assert.IsType(JsonConvert.DeserializeObject(new Adult().ToJson()));
+ }
+
+ ///
+ /// Test deserialize a Child from type Person
+ ///
+ [Fact]
+ public void ChildDeserializeFromPersonTest()
+ {
+ // TODO uncomment below to test deserialize a Child from type Person
+ //Assert.IsType(JsonConvert.DeserializeObject(new Child().ToJson()));
+ }
+
+ ///
+ /// Test the property 'FirstName'
+ ///
+ [Fact]
+ public void FirstNameTest()
+ {
+ // TODO unit test for the property 'FirstName'
+ }
+
+ ///
+ /// Test the property 'LastName'
+ ///
+ [Fact]
+ public void LastNameTest()
+ {
+ // TODO unit test for the property 'LastName'
+ }
+
+ ///
+ /// Test the property 'Type'
+ ///
+ [Fact]
+ public void TypeTest()
+ {
+ // TODO unit test for the property 'Type'
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj
new file mode 100644
index 00000000000..66afad92ec4
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj
@@ -0,0 +1,19 @@
+
+
+
+ Org.OpenAPITools.Test
+ Org.OpenAPITools.Test
+ net48
+ false
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/README.md b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools.Test/README.md
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Api/DefaultApi.cs
new file mode 100644
index 00000000000..7b111e173ae
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Api/DefaultApi.cs
@@ -0,0 +1,355 @@
+//
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using System.Net.Http;
+using System.Net.Http.Headers;
+using System.Text.Json;
+using Org.OpenAPITools.Client;
+using Org.OpenAPITools.Model;
+using System.Diagnostics.CodeAnalysis;
+
+namespace Org.OpenAPITools.Api
+{
+ ///
+ /// Represents a collection of functions to interact with the API endpoints
+ /// This class is registered as transient.
+ ///
+ public interface IDefaultApi : IApi
+ {
+ ///
+ /// The class containing the events
+ ///
+ DefaultApiEvents Events { get; }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Thrown when fails to make API call
+ /// The id of the person to retrieve
+ /// Cancellation Token to cancel the request.
+ /// <>
+ Task ListAsync(string personId, System.Threading.CancellationToken cancellationToken = default);
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// The id of the person to retrieve
+ /// Cancellation Token to cancel the request.
+ /// <>
+ Task ListOrDefaultAsync(string personId, System.Threading.CancellationToken cancellationToken = default);
+ }
+
+ ///
+ /// The
+ ///
+ public interface IListApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk
+ {
+ ///
+ /// Returns true if the response is 200 Ok
+ ///
+ ///
+ bool IsOk { get; }
+ }
+
+ ///
+ /// Represents a collection of functions to interact with the API endpoints
+ ///
+ public class DefaultApiEvents
+ {
+ ///
+ /// The event raised after the server response
+ ///
+ public event EventHandler OnList;
+
+ ///
+ /// The event raised after an error querying the server
+ ///
+ public event EventHandler OnErrorList;
+
+ internal void ExecuteOnList(DefaultApi.ListApiResponse apiResponse)
+ {
+ OnList?.Invoke(this, new ApiResponseEventArgs(apiResponse));
+ }
+
+ internal void ExecuteOnErrorList(Exception exception)
+ {
+ OnErrorList?.Invoke(this, new ExceptionEventArgs(exception));
+ }
+ }
+
+ ///
+ /// Represents a collection of functions to interact with the API endpoints
+ ///
+ public sealed partial class DefaultApi : IDefaultApi
+ {
+ private JsonSerializerOptions _jsonSerializerOptions;
+
+ ///
+ /// The logger factory
+ ///
+ public ILoggerFactory LoggerFactory { get; }
+
+ ///
+ /// The logger
+ ///
+ public ILogger Logger { get; }
+
+ ///
+ /// The HttpClient
+ ///
+ public HttpClient HttpClient { get; }
+
+ ///
+ /// The class containing the events
+ ///
+ public DefaultApiEvents Events { get; }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ public DefaultApi(ILogger logger, ILoggerFactory loggerFactory, HttpClient httpClient, JsonSerializerOptionsProvider jsonSerializerOptionsProvider, DefaultApiEvents defaultApiEvents)
+ {
+ _jsonSerializerOptions = jsonSerializerOptionsProvider.Options;
+ LoggerFactory = loggerFactory;
+ Logger = LoggerFactory.CreateLogger();
+ HttpClient = httpClient;
+ Events = defaultApiEvents;
+ }
+
+ partial void FormatList(ref string personId);
+
+ ///
+ /// Validates the request parameters
+ ///
+ ///
+ ///
+ private void ValidateList(string personId)
+ {
+ if (personId == null)
+ throw new ArgumentNullException(nameof(personId));
+ }
+
+ ///
+ /// Processes the server response
+ ///
+ ///
+ ///
+ private void AfterListDefaultImplementation(IListApiResponse apiResponseLocalVar, string personId)
+ {
+ bool suppressDefaultLog = false;
+ AfterList(ref suppressDefaultLog, apiResponseLocalVar, personId);
+ if (!suppressDefaultLog)
+ Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path);
+ }
+
+ ///
+ /// Processes the server response
+ ///
+ ///
+ ///
+ ///
+ partial void AfterList(ref bool suppressDefaultLog, IListApiResponse apiResponseLocalVar, string personId);
+
+ ///
+ /// Logs exceptions that occur while retrieving the server response
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void OnErrorListDefaultImplementation(Exception exception, string pathFormat, string path, string personId)
+ {
+ bool suppressDefaultLog = false;
+ OnErrorList(ref suppressDefaultLog, exception, pathFormat, path, personId);
+ if (!suppressDefaultLog)
+ Logger.LogError(exception, "An error occurred while sending the request to the server.");
+ }
+
+ ///
+ /// A partial method that gives developers a way to provide customized exception handling
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ partial void OnErrorList(ref bool suppressDefaultLog, Exception exception, string pathFormat, string path, string personId);
+
+ ///
+ ///
+ ///
+ /// The id of the person to retrieve
+ /// Cancellation Token to cancel the request.
+ /// <>
+ public async Task ListOrDefaultAsync(string personId, System.Threading.CancellationToken cancellationToken = default)
+ {
+ try
+ {
+ return await ListAsync(personId, cancellationToken).ConfigureAwait(false);
+ }
+ catch (Exception)
+ {
+ return null;
+ }
+ }
+
+ ///
+ ///
+ ///
+ /// Thrown when fails to make API call
+ /// The id of the person to retrieve
+ /// Cancellation Token to cancel the request.
+ /// <>
+ public async Task ListAsync(string personId, System.Threading.CancellationToken cancellationToken = default)
+ {
+ UriBuilder uriBuilderLocalVar = new UriBuilder();
+
+ try
+ {
+ ValidateList(personId);
+
+ FormatList(ref personId);
+
+ using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage())
+ {
+ uriBuilderLocalVar.Host = HttpClient.BaseAddress.Host;
+ uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port;
+ uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme;
+ uriBuilderLocalVar.Path = ClientUtils.CONTEXT_PATH + "/person/display/{personId}";
+ uriBuilderLocalVar.Path = uriBuilderLocalVar.Path.Replace("%7BpersonId%7D", Uri.EscapeDataString(personId.ToString()));
+
+ httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri;
+
+ string[] acceptLocalVars = new string[] {
+ "application/json"
+ };
+
+ string acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars);
+
+ if (acceptLocalVar != null)
+ httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar));
+ httpRequestMessageLocalVar.Method = new HttpMethod("GET");
+
+ DateTime requestedAtLocalVar = DateTime.UtcNow;
+
+ using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false))
+ {
+ string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync().ConfigureAwait(false);
+
+ ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger();
+
+ ListApiResponse apiResponseLocalVar = new ListApiResponse(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/person/display/{personId}", requestedAtLocalVar, _jsonSerializerOptions);
+
+ AfterListDefaultImplementation(apiResponseLocalVar, personId);
+
+ Events.ExecuteOnList(apiResponseLocalVar);
+
+ return apiResponseLocalVar;
+ }
+ }
+ }
+ catch(Exception e)
+ {
+ OnErrorListDefaultImplementation(e, "/person/display/{personId}", uriBuilderLocalVar.Path, personId);
+ Events.ExecuteOnErrorList(e);
+ throw;
+ }
+ }
+
+ ///
+ /// The
+ ///
+ public partial class ListApiResponse : Org.OpenAPITools.Client.ApiResponse, IListApiResponse
+ {
+ ///
+ /// The logger
+ ///
+ public ILogger Logger { get; }
+
+ ///
+ /// The
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ListApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions)
+ {
+ Logger = logger;
+ OnCreated(httpRequestMessage, httpResponseMessage);
+ }
+
+ partial void OnCreated(System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage);
+
+ ///
+ /// Returns true if the response is 200 Ok
+ ///
+ ///
+ public bool IsOk => 200 == (int)StatusCode;
+
+ ///
+ /// Deserializes the response if the response is 200 Ok
+ ///
+ ///
+ public Org.OpenAPITools.Model.Person Ok()
+ {
+ // This logic may be modified with the AsModel.mustache template
+ return IsOk
+ ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions)
+ : default;
+ }
+
+ ///
+ /// Returns true if the response is 200 Ok and the deserialized response is not null
+ ///
+ ///
+ ///
+ public bool TryOk(out Org.OpenAPITools.Model.Person result)
+ {
+ result = null;
+
+ try
+ {
+ result = Ok();
+ } catch (Exception e)
+ {
+ OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200);
+ }
+
+ return result != null;
+ }
+
+ private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode)
+ {
+ bool suppressDefaultLog = false;
+ OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode);
+ if (!suppressDefaultLog)
+ Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode);
+ }
+
+ partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode);
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Api/IApi.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Api/IApi.cs
new file mode 100644
index 00000000000..28520f043f2
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Api/IApi.cs
@@ -0,0 +1,15 @@
+using System.Net.Http;
+
+namespace Org.OpenAPITools.Api
+{
+ ///
+ /// Any Api client
+ ///
+ public interface IApi
+ {
+ ///
+ /// The HttpClient
+ ///
+ HttpClient HttpClient { get; }
+ }
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ApiException.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ApiException.cs
new file mode 100644
index 00000000000..78fdad8039f
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ApiException.cs
@@ -0,0 +1,50 @@
+//
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// API Exception
+ ///
+ public class ApiException : Exception
+ {
+ ///
+ /// The reason the api request failed
+ ///
+ public string ReasonPhrase { get; }
+
+ ///
+ /// The HttpStatusCode
+ ///
+ public System.Net.HttpStatusCode StatusCode { get; }
+
+ ///
+ /// The raw data returned by the api
+ ///
+ public string RawContent { get; }
+
+ ///
+ /// Construct the ApiException from parts of the response
+ ///
+ ///
+ ///
+ ///
+ public ApiException(string reasonPhrase, System.Net.HttpStatusCode statusCode, string rawContent) : base(reasonPhrase ?? rawContent)
+ {
+ ReasonPhrase = reasonPhrase;
+
+ StatusCode = statusCode;
+
+ RawContent = rawContent;
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ApiFactory.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ApiFactory.cs
new file mode 100644
index 00000000000..b9b27c613f8
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ApiFactory.cs
@@ -0,0 +1,49 @@
+using System;
+using Microsoft.Extensions.DependencyInjection;
+using Org.OpenAPITools.Api;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// An IApiFactory interface
+ ///
+ public interface IApiFactory
+ {
+ ///
+ /// A method to create an IApi of type IResult
+ ///
+ ///
+ ///
+ IResult Create() where IResult : IApi;
+ }
+
+ ///
+ /// An ApiFactory
+ ///
+ public class ApiFactory : IApiFactory
+ {
+ ///
+ /// The service provider
+ ///
+ public IServiceProvider Services { get; }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ public ApiFactory(IServiceProvider services)
+ {
+ Services = services;
+ }
+
+ ///
+ /// A method to create an IApi of type IResult
+ ///
+ ///
+ ///
+ public IResult Create() where IResult : IApi
+ {
+ return Services.GetRequiredService();
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ApiResponseEventArgs.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ApiResponseEventArgs.cs
new file mode 100644
index 00000000000..3cb65e5adc0
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ApiResponseEventArgs.cs
@@ -0,0 +1,24 @@
+using System;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Useful for tracking server health
+ ///
+ public class ApiResponseEventArgs : EventArgs
+ {
+ ///
+ /// The ApiResponse
+ ///
+ public ApiResponse ApiResponse { get; }
+
+ ///
+ /// The ApiResponseEventArgs
+ ///
+ ///
+ public ApiResponseEventArgs(ApiResponse apiResponse)
+ {
+ ApiResponse = apiResponse;
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ApiResponse`1.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ApiResponse`1.cs
new file mode 100644
index 00000000000..16e55f8c7b9
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ApiResponse`1.cs
@@ -0,0 +1,170 @@
+//
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Diagnostics.CodeAnalysis;
+using System.Net;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Provides a non-generic contract for the ApiResponse wrapper.
+ ///
+ public partial interface IApiResponse
+ {
+ ///
+ /// The IsSuccessStatusCode from the api response
+ ///
+ bool IsSuccessStatusCode { get; }
+
+ ///
+ /// Gets the status code (HTTP status code)
+ ///
+ /// The status code.
+ HttpStatusCode StatusCode { get; }
+
+ ///
+ /// The raw content of this response.
+ ///
+ string RawContent { get; }
+
+ ///
+ /// The DateTime when the request was retrieved.
+ ///
+ DateTime DownloadedAt { get; }
+
+ ///
+ /// The headers contained in the api response
+ ///
+ System.Net.Http.Headers.HttpResponseHeaders Headers { get; }
+
+ ///
+ /// The path used when making the request.
+ ///
+ string Path { get; }
+
+ ///
+ /// The reason phrase contained in the api response
+ ///
+ string ReasonPhrase { get; }
+
+ ///
+ /// The DateTime when the request was sent.
+ ///
+ DateTime RequestedAt { get; }
+
+ ///
+ /// The Uri used when making the request.
+ ///
+ Uri RequestUri { get; }
+ }
+
+ ///
+ /// API Response
+ ///
+ public partial class ApiResponse : IApiResponse
+ {
+ ///
+ /// Gets the status code (HTTP status code)
+ ///
+ /// The status code.
+ public HttpStatusCode StatusCode { get; }
+
+ ///
+ /// The raw data
+ ///
+ public string RawContent { get; protected set; }
+
+ ///
+ /// The IsSuccessStatusCode from the api response
+ ///
+ public bool IsSuccessStatusCode { get; }
+
+ ///
+ /// The reason phrase contained in the api response
+ ///
+ public string ReasonPhrase { get; }
+
+ ///
+ /// The headers contained in the api response
+ ///
+ public System.Net.Http.Headers.HttpResponseHeaders Headers { get; }
+
+ ///
+ /// The DateTime when the request was retrieved.
+ ///
+ public DateTime DownloadedAt { get; } = DateTime.UtcNow;
+
+ ///
+ /// The DateTime when the request was sent.
+ ///
+ public DateTime RequestedAt { get; }
+
+ ///
+ /// The path used when making the request.
+ ///
+ public string Path { get; }
+
+ ///
+ /// The Uri used when making the request.
+ ///
+ public Uri RequestUri { get; }
+
+ ///
+ /// The
+ ///
+ protected System.Text.Json.JsonSerializerOptions _jsonSerializerOptions;
+
+ ///
+ /// Construct the response using an HttpResponseMessage
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ApiResponse(System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions)
+ {
+ StatusCode = httpResponseMessage.StatusCode;
+ Headers = httpResponseMessage.Headers;
+ IsSuccessStatusCode = httpResponseMessage.IsSuccessStatusCode;
+ ReasonPhrase = httpResponseMessage.ReasonPhrase;
+ RawContent = rawContent;
+ Path = path;
+ RequestUri = httpRequestMessage.RequestUri;
+ RequestedAt = requestedAt;
+ _jsonSerializerOptions = jsonSerializerOptions;
+ OnCreated(httpRequestMessage, httpResponseMessage);
+ }
+
+ partial void OnCreated(System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage);
+ }
+
+ ///
+ /// An interface for responses of type
+ ///
+ ///
+ public interface IOk : IApiResponse
+ {
+ ///
+ /// Deserializes the response if the response is Ok
+ ///
+ ///
+ TType Ok();
+
+ ///
+ /// Returns true if the response is Ok and the deserialized response is not null
+ ///
+ ///
+ ///
+ bool TryOk(out TType result);
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ClientUtils.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ClientUtils.cs
new file mode 100644
index 00000000000..8ea796e8169
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ClientUtils.cs
@@ -0,0 +1,329 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.IO;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using System.Text.Json;
+using System.Text.RegularExpressions;
+using KellermanSoftware.CompareNetObjects;
+using Org.OpenAPITools.Model;
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo("Org.OpenAPITools.Test")]
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Utility functions providing some benefit to API client consumers.
+ ///
+ public static class ClientUtils
+ {
+ ///
+ /// An instance of CompareLogic.
+ ///
+ public static CompareLogic compareLogic;
+
+ ///
+ /// Static constructor to initialise compareLogic.
+ ///
+ static ClientUtils()
+ {
+ ComparisonConfig comparisonConfig = new ComparisonConfig();
+ comparisonConfig.UseHashCodeIdentifier = true;
+ compareLogic = new CompareLogic(comparisonConfig);
+ }
+
+ ///
+ /// A delegate for events.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public delegate void EventHandler(object sender, T e) where T : EventArgs;
+
+ ///
+ /// Returns true when deserialization succeeds.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static bool TryDeserialize(string json, JsonSerializerOptions options, out T result)
+ {
+ try
+ {
+ result = JsonSerializer.Deserialize(json, options);
+ return result != null;
+ }
+ catch (Exception)
+ {
+ result = default;
+ return false;
+ }
+ }
+
+ ///
+ /// Returns true when deserialization succeeds.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static bool TryDeserialize(ref Utf8JsonReader reader, JsonSerializerOptions options, out T result)
+ {
+ try
+ {
+ result = JsonSerializer.Deserialize(ref reader, options);
+ return result != null;
+ }
+ catch (Exception)
+ {
+ result = default;
+ return false;
+ }
+ }
+
+ ///
+ /// Sanitize filename by removing the path
+ ///
+ /// Filename
+ /// Filename
+ public static string SanitizeFilename(string filename)
+ {
+ Match match = Regex.Match(filename, @".*[/\\](.*)$");
+ return match.Success ? match.Groups[1].Value : filename;
+ }
+
+ ///
+ /// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime.
+ /// If parameter is a list, join the list with ",".
+ /// Otherwise just return the string.
+ ///
+ /// The parameter (header, path, query, form).
+ /// The DateTime serialization format.
+ /// Formatted string.
+ public static string ParameterToString(object obj, string format = ISO8601_DATETIME_FORMAT)
+ {
+ if (obj is DateTime dateTime)
+ // Return a formatted date string - Can be customized with Configuration.DateTimeFormat
+ // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o")
+ // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
+ // For example: 2009-06-15T13:45:30.0000000
+ return dateTime.ToString(format);
+ if (obj is DateTimeOffset dateTimeOffset)
+ // Return a formatted date string - Can be customized with Configuration.DateTimeFormat
+ // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o")
+ // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
+ // For example: 2009-06-15T13:45:30.0000000
+ return dateTimeOffset.ToString(format);
+ if (obj is bool boolean)
+ return boolean
+ ? "true"
+ : "false";
+ if (obj is ICollection collection)
+ {
+ List entries = new List();
+ foreach (var entry in collection)
+ entries.Add(ParameterToString(entry));
+ return string.Join(",", entries);
+ }
+
+ return Convert.ToString(obj, System.Globalization.CultureInfo.InvariantCulture);
+ }
+
+ ///
+ /// URL encode a string
+ /// Credit/Ref: https://github.com/restsharp/RestSharp/blob/master/RestSharp/Extensions/StringExtensions.cs#L50
+ ///
+ /// string to be URL encoded
+ /// Byte array
+ public static string UrlEncode(string input)
+ {
+ const int maxLength = 32766;
+
+ if (input == null)
+ {
+ throw new ArgumentNullException("input");
+ }
+
+ if (input.Length <= maxLength)
+ {
+ return Uri.EscapeDataString(input);
+ }
+
+ StringBuilder sb = new StringBuilder(input.Length * 2);
+ int index = 0;
+
+ while (index < input.Length)
+ {
+ int length = Math.Min(input.Length - index, maxLength);
+ string subString = input.Substring(index, length);
+
+ sb.Append(Uri.EscapeDataString(subString));
+ index += subString.Length;
+ }
+
+ return sb.ToString();
+ }
+
+ ///
+ /// Encode string in base64 format.
+ ///
+ /// string to be encoded.
+ /// Encoded string.
+ public static string Base64Encode(string text)
+ {
+ return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(text));
+ }
+
+ ///
+ /// Convert stream to byte array
+ ///
+ /// Input stream to be converted
+ /// Byte array
+ public static byte[] ReadAsBytes(Stream inputStream)
+ {
+ using (var ms = new MemoryStream())
+ {
+ inputStream.CopyTo(ms);
+ return ms.ToArray();
+ }
+ }
+
+ ///
+ /// Select the Content-Type header's value from the given content-type array:
+ /// 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.
+ /// The Content-Type header to use.
+ public static string SelectHeaderContentType(string[] contentTypes)
+ {
+ if (contentTypes.Length == 0)
+ return null;
+
+ foreach (var contentType in contentTypes)
+ {
+ if (IsJsonMime(contentType))
+ return contentType;
+ }
+
+ return contentTypes[0]; // use the first content type specified in 'consumes'
+ }
+
+ ///
+ /// Select the Accept header's value from the given accepts array:
+ /// if JSON exists in the given array, use it;
+ /// otherwise use all of them (joining into a string)
+ ///
+ /// The accepts array to select from.
+ /// The Accept header to use.
+ public static string SelectHeaderAccept(string[] accepts)
+ {
+ if (accepts.Length == 0)
+ return null;
+
+ if (accepts.Contains("application/json", StringComparer.OrdinalIgnoreCase))
+ return "application/json";
+
+ return string.Join(",", accepts);
+ }
+
+ ///
+ /// Provides a case-insensitive check that a provided content type is a known JSON-like content type.
+ ///
+ public static readonly Regex JsonRegex = new Regex("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");
+
+ ///
+ /// 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 static bool IsJsonMime(string mime)
+ {
+ if (string.IsNullOrWhiteSpace(mime)) return false;
+
+ return JsonRegex.IsMatch(mime) || mime.Equals("application/json-patch+json");
+ }
+
+ ///
+ /// Get the discriminator
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static string GetDiscriminator(Utf8JsonReader utf8JsonReader, string discriminator)
+ {
+ int currentDepth = utf8JsonReader.CurrentDepth;
+
+ if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray)
+ throw new JsonException();
+
+ JsonTokenType startingTokenType = utf8JsonReader.TokenType;
+
+ while (utf8JsonReader.Read())
+ {
+ if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth)
+ break;
+
+ if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth)
+ break;
+
+ if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1)
+ {
+ string localVarJsonPropertyName = utf8JsonReader.GetString();
+ utf8JsonReader.Read();
+
+ if (localVarJsonPropertyName != null && localVarJsonPropertyName.Equals(discriminator))
+ return utf8JsonReader.GetString();
+ }
+ }
+
+ throw new JsonException("The specified discriminator was not found.");
+ }
+
+ ///
+ /// The base path of the API
+ ///
+ public const string BASE_ADDRESS = "http://api.example.xyz/v1";
+
+ ///
+ /// The scheme of the API
+ ///
+ public const string SCHEME = "http";
+
+ ///
+ /// The context path of the API
+ ///
+ public const string CONTEXT_PATH = "/v1";
+
+ ///
+ /// The host of the API
+ ///
+ public const string HOST = "api.example.xyz";
+
+ ///
+ /// The format to use for DateTime serialization
+ ///
+ public const string ISO8601_DATETIME_FORMAT = "o";
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/CookieContainer.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/CookieContainer.cs
new file mode 100644
index 00000000000..da94287dab8
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/CookieContainer.cs
@@ -0,0 +1,18 @@
+//
+
+using System.Linq;
+using System.Collections.Generic;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// A class containing a CookieContainer
+ ///
+ public sealed class CookieContainer
+ {
+ ///
+ /// The collection of tokens
+ ///
+ public System.Net.CookieContainer Value { get; } = new System.Net.CookieContainer();
+ }
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/DateTimeJsonConverter.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/DateTimeJsonConverter.cs
new file mode 100644
index 00000000000..a7f3806b960
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/DateTimeJsonConverter.cs
@@ -0,0 +1,77 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Globalization;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Formatter for 'date' and 'date-time' openapi formats ss defined by full-date - RFC3339
+ /// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types
+ ///
+ public class DateTimeJsonConverter : JsonConverter
+ {
+ ///
+ /// The formats used to deserialize the date
+ ///
+ public static string[] Formats { get; } = {
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ssK",
+ "yyyy'-'MM'-'dd",
+ "yyyyMMddTHHmmss.fffffffK",
+ "yyyyMMddTHHmmss.ffffffK",
+ "yyyyMMddTHHmmss.fffffK",
+ "yyyyMMddTHHmmss.ffffK",
+ "yyyyMMddTHHmmss.fffK",
+ "yyyyMMddTHHmmss.ffK",
+ "yyyyMMddTHHmmss.fK",
+ "yyyyMMddTHHmmssK",
+ "yyyyMMdd"
+
+ };
+
+ ///
+ /// Returns a DateTime from the Json object
+ ///
+ ///
+ ///
+ ///
+ ///
+ public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
+ if (reader.TokenType == JsonTokenType.Null)
+ throw new NotSupportedException();
+
+ string value = reader.GetString();
+
+ foreach(string format in Formats)
+ if (DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out DateTime result))
+ return result;
+
+ throw new NotSupportedException();
+ }
+
+ ///
+ /// Writes the DateTime to the json writer
+ ///
+ ///
+ ///
+ ///
+ public override void Write(Utf8JsonWriter writer, DateTime dateTimeValue, JsonSerializerOptions options) =>
+ writer.WriteStringValue(dateTimeValue.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK", CultureInfo.InvariantCulture));
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/DateTimeNullableJsonConverter.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/DateTimeNullableJsonConverter.cs
new file mode 100644
index 00000000000..c818977618f
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/DateTimeNullableJsonConverter.cs
@@ -0,0 +1,82 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Globalization;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Formatter for 'date' and 'date-time' openapi formats ss defined by full-date - RFC3339
+ /// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types
+ ///
+ public class DateTimeNullableJsonConverter : JsonConverter
+ {
+ ///
+ /// The formats used to deserialize the date
+ ///
+ public static string[] Formats { get; } = {
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ssK",
+ "yyyy'-'MM'-'dd",
+ "yyyyMMddTHHmmss.fffffffK",
+ "yyyyMMddTHHmmss.ffffffK",
+ "yyyyMMddTHHmmss.fffffK",
+ "yyyyMMddTHHmmss.ffffK",
+ "yyyyMMddTHHmmss.fffK",
+ "yyyyMMddTHHmmss.ffK",
+ "yyyyMMddTHHmmss.fK",
+ "yyyyMMddTHHmmssK",
+ "yyyyMMdd"
+
+ };
+
+ ///
+ /// Returns a DateTime from the Json object
+ ///
+ ///
+ ///
+ ///
+ ///
+ public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
+ if (reader.TokenType == JsonTokenType.Null)
+ return null;
+
+ string value = reader.GetString();
+
+ foreach(string format in Formats)
+ if (DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out DateTime result))
+ return result;
+
+ return null;
+ }
+
+ ///
+ /// Writes the DateTime to the json writer
+ ///
+ ///
+ ///
+ ///
+ public override void Write(Utf8JsonWriter writer, DateTime? dateTimeValue, JsonSerializerOptions options)
+ {
+ if (dateTimeValue == null)
+ writer.WriteNullValue();
+ else
+ writer.WriteStringValue(dateTimeValue.Value.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK", CultureInfo.InvariantCulture));
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ExceptionEventArgs.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ExceptionEventArgs.cs
new file mode 100644
index 00000000000..dcfab667823
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/ExceptionEventArgs.cs
@@ -0,0 +1,24 @@
+using System;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Useful for tracking server health
+ ///
+ public class ExceptionEventArgs : EventArgs
+ {
+ ///
+ /// The ApiResponse
+ ///
+ public Exception Exception { get; }
+
+ ///
+ /// The ExcepetionEventArgs
+ ///
+ ///
+ public ExceptionEventArgs(Exception exception)
+ {
+ Exception = exception;
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/HostConfiguration.cs
new file mode 100644
index 00000000000..7b7d86c3238
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/HostConfiguration.cs
@@ -0,0 +1,131 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using System.Net.Http;
+using Microsoft.Extensions.DependencyInjection;
+using Org.OpenAPITools.Api;
+using Org.OpenAPITools.Model;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Provides hosting configuration for Org.OpenAPITools
+ ///
+ public class HostConfiguration
+ {
+ private readonly IServiceCollection _services;
+ private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions();
+
+ internal bool HttpClientsAdded { get; private set; }
+
+ ///
+ /// Instantiates the class
+ ///
+ ///
+ public HostConfiguration(IServiceCollection services)
+ {
+ _services = services;
+ _jsonOptions.Converters.Add(new JsonStringEnumConverter());
+ _jsonOptions.Converters.Add(new DateTimeJsonConverter());
+ _jsonOptions.Converters.Add(new DateTimeNullableJsonConverter());
+ _jsonOptions.Converters.Add(new AdultJsonConverter());
+ _jsonOptions.Converters.Add(new ChildJsonConverter());
+ _jsonOptions.Converters.Add(new PersonJsonConverter());
+ JsonSerializerOptionsProvider jsonSerializerOptionsProvider = new JsonSerializerOptionsProvider(_jsonOptions);
+ _services.AddSingleton(jsonSerializerOptionsProvider);
+ _services.AddSingleton();
+ _services.AddSingleton();
+ _services.AddTransient();
+ }
+
+ ///
+ /// Configures the HttpClients.
+ ///
+ ///
+ ///
+ ///
+ public HostConfiguration AddApiHttpClients
+ (
+ Action client = null, Action builder = null)
+ {
+ if (client == null)
+ client = c => c.BaseAddress = new Uri(ClientUtils.BASE_ADDRESS);
+
+ List builders = new List();
+
+ builders.Add(_services.AddHttpClient(client));
+
+ if (builder != null)
+ foreach (IHttpClientBuilder instance in builders)
+ builder(instance);
+
+ HttpClientsAdded = true;
+
+ return this;
+ }
+
+ ///
+ /// Configures the JsonSerializerSettings
+ ///
+ ///
+ ///
+ public HostConfiguration ConfigureJsonOptions(Action options)
+ {
+ options(_jsonOptions);
+
+ return this;
+ }
+
+ ///
+ /// Adds tokens to your IServiceCollection
+ ///
+ ///
+ ///
+ ///
+ public HostConfiguration AddTokens(TTokenBase token) where TTokenBase : TokenBase
+ {
+ return AddTokens(new TTokenBase[]{ token });
+ }
+
+ ///
+ /// Adds tokens to your IServiceCollection
+ ///
+ ///
+ ///
+ ///
+ public HostConfiguration AddTokens(IEnumerable tokens) where TTokenBase : TokenBase
+ {
+ TokenContainer container = new TokenContainer(tokens);
+ _services.AddSingleton(services => container);
+
+ return this;
+ }
+
+ ///
+ /// Adds a token provider to your IServiceCollection
+ ///
+ ///
+ ///
+ ///
+ public HostConfiguration UseProvider()
+ where TTokenProvider : TokenProvider
+ where TTokenBase : TokenBase
+ {
+ _services.AddSingleton();
+ _services.AddSingleton>(services => services.GetRequiredService());
+
+ return this;
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/JsonSerializerOptionsProvider.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/JsonSerializerOptionsProvider.cs
new file mode 100644
index 00000000000..8fd6b68578f
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/JsonSerializerOptionsProvider.cs
@@ -0,0 +1,25 @@
+//
+
+using System.Text.Json;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Provides the JsonSerializerOptions
+ ///
+ public class JsonSerializerOptionsProvider
+ {
+ ///
+ /// the JsonSerializerOptions
+ ///
+ public JsonSerializerOptions Options { get; }
+
+ ///
+ /// Instantiates a JsonSerializerOptionsProvider
+ ///
+ public JsonSerializerOptionsProvider(JsonSerializerOptions options)
+ {
+ Options = options;
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/Option.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/Option.cs
new file mode 100644
index 00000000000..0b113d11177
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/Option.cs
@@ -0,0 +1,51 @@
+//
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// A wrapper for operation parameters which are not required
+ ///
+ public struct Option
+ {
+ ///
+ /// The value to send to the server
+ ///
+ public TType Value { get; }
+
+ ///
+ /// When true the value will be sent to the server
+ ///
+ internal bool IsSet { get; }
+
+ ///
+ /// A wrapper for operation parameters which are not required
+ ///
+ ///
+ public Option(TType value)
+ {
+ IsSet = true;
+ Value = value;
+ }
+
+ ///
+ /// Implicitly converts this option to the contained type
+ ///
+ ///
+ public static implicit operator TType(Option option) => option.Value;
+
+ ///
+ /// Implicitly converts the provided value to an Option
+ ///
+ ///
+ public static implicit operator Option(TType value) => new Option(value);
+ }
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/RateLimitProvider`1.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/RateLimitProvider`1.cs
new file mode 100644
index 00000000000..53ad628a9a3
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/RateLimitProvider`1.cs
@@ -0,0 +1,55 @@
+//
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Channels;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Provides a token to the api clients. Tokens will be rate limited based on the provided TimeSpan.
+ ///
+ ///
+ public class RateLimitProvider : TokenProvider where TTokenBase : TokenBase
+ {
+ internal Dictionary> AvailableTokens { get; } = new Dictionary>();
+
+ ///
+ /// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
+ ///
+ ///
+ public RateLimitProvider(TokenContainer container) : base(container.Tokens)
+ {
+ foreach(TTokenBase token in _tokens)
+ token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
+
+ BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
+ {
+ FullMode = BoundedChannelFullMode.DropWrite
+ };
+
+ AvailableTokens.Add(string.Empty, Channel.CreateBounded(options));
+
+ foreach(Channel tokens in AvailableTokens.Values)
+ for (int i = 0; i < _tokens.Length; i++)
+ _tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
+ }
+
+ internal override async System.Threading.Tasks.ValueTask GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
+ {
+ if (!AvailableTokens.TryGetValue(header, out Channel tokens))
+ throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
+
+ return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/TokenBase.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/TokenBase.cs
new file mode 100644
index 00000000000..ec843104caf
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/TokenBase.cs
@@ -0,0 +1,69 @@
+//
+
+using System;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// The base for all tokens.
+ ///
+ public abstract class TokenBase
+ {
+ private DateTime _nextAvailable = DateTime.UtcNow;
+ private object _nextAvailableLock = new object();
+ private readonly System.Timers.Timer _timer = new System.Timers.Timer();
+
+
+ internal TimeSpan? Timeout { get; set; }
+ internal delegate void TokenBecameAvailableEventHandler(object sender);
+ internal event TokenBecameAvailableEventHandler TokenBecameAvailable;
+
+
+ ///
+ /// Initialize a TokenBase object.
+ ///
+ ///
+ internal TokenBase(TimeSpan? timeout = null)
+ {
+ Timeout = timeout;
+
+ if (Timeout != null)
+ StartTimer(Timeout.Value);
+ }
+
+
+ ///
+ /// Starts the token's timer
+ ///
+ ///
+ internal void StartTimer(TimeSpan timeout)
+ {
+ Timeout = timeout;
+ _timer.Interval = Timeout.Value.TotalMilliseconds;
+ _timer.Elapsed += OnTimer;
+ _timer.AutoReset = true;
+ _timer.Start();
+ }
+
+ ///
+ /// Returns true while the token is rate limited.
+ ///
+ public bool IsRateLimited => _nextAvailable > DateTime.UtcNow;
+
+ ///
+ /// Triggered when the server returns status code TooManyRequests
+ /// Once triggered the local timeout will be extended an arbitrary length of time.
+ ///
+ public void BeginRateLimit()
+ {
+ lock(_nextAvailableLock)
+ _nextAvailable = DateTime.UtcNow.AddSeconds(5);
+ }
+
+ private void OnTimer(object sender, System.Timers.ElapsedEventArgs e)
+ {
+ if (TokenBecameAvailable != null && !IsRateLimited)
+ TokenBecameAvailable.Invoke(this);
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/TokenContainer`1.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/TokenContainer`1.cs
new file mode 100644
index 00000000000..ab372352e21
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/TokenContainer`1.cs
@@ -0,0 +1,35 @@
+//
+
+using System.Linq;
+using System.Collections.Generic;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// A container for a collection of tokens.
+ ///
+ ///
+ public sealed class TokenContainer where TTokenBase : TokenBase
+ {
+ ///
+ /// The collection of tokens
+ ///
+ public List Tokens { get; } = new List();
+
+ ///
+ /// Instantiates a TokenContainer
+ ///
+ public TokenContainer()
+ {
+ }
+
+ ///
+ /// Instantiates a TokenContainer
+ ///
+ ///
+ public TokenContainer(System.Collections.Generic.IEnumerable tokens)
+ {
+ Tokens = tokens.ToList();
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/TokenProvider`1.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/TokenProvider`1.cs
new file mode 100644
index 00000000000..ed829aca772
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Client/TokenProvider`1.cs
@@ -0,0 +1,42 @@
+//
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using Org.OpenAPITools.Client;
+
+namespace Org.OpenAPITools
+{
+ ///
+ /// A class which will provide tokens.
+ ///
+ public abstract class TokenProvider where TTokenBase : TokenBase
+ {
+ ///
+ /// The array of tokens.
+ ///
+ protected TTokenBase[] _tokens;
+
+ internal abstract System.Threading.Tasks.ValueTask GetAsync(string header = "", System.Threading.CancellationToken cancellation = default);
+
+ ///
+ /// Instantiates a TokenProvider.
+ ///
+ ///
+ public TokenProvider(IEnumerable tokens)
+ {
+ _tokens = tokens.ToArray();
+
+ if (_tokens.Length == 0)
+ throw new ArgumentException("You did not provide any tokens.");
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Extensions/IHostBuilderExtensions.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Extensions/IHostBuilderExtensions.cs
new file mode 100644
index 00000000000..2221ca651c6
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Extensions/IHostBuilderExtensions.cs
@@ -0,0 +1,57 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Org.OpenAPITools.Client;
+
+namespace Org.OpenAPITools.Extensions
+{
+ ///
+ /// Extension methods for IHostBuilder
+ ///
+ public static class IHostBuilderExtensions
+ {
+ ///
+ /// Add the api to your host builder.
+ ///
+ ///
+ public static IHostBuilder ConfigureApi(this IHostBuilder builder)
+ {
+ builder.ConfigureServices((context, services) =>
+ {
+ HostConfiguration config = new HostConfiguration(services);
+
+ IServiceCollectionExtensions.AddApi(services, config);
+ });
+
+ return builder;
+ }
+
+ ///
+ /// Add the api to your host builder.
+ ///
+ ///
+ ///
+ public static IHostBuilder ConfigureApi(this IHostBuilder builder, Action options)
+ {
+ builder.ConfigureServices((context, services) =>
+ {
+ HostConfiguration config = new HostConfiguration(services);
+
+ options(context, services, config);
+
+ IServiceCollectionExtensions.AddApi(services, config);
+ });
+
+ return builder;
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Extensions/IHttpClientBuilderExtensions.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Extensions/IHttpClientBuilderExtensions.cs
new file mode 100644
index 00000000000..a4c5431cf87
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Extensions/IHttpClientBuilderExtensions.cs
@@ -0,0 +1,77 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Net.Http;
+using Microsoft.Extensions.DependencyInjection;
+using Polly.Timeout;
+using Polly.Extensions.Http;
+using Polly;
+
+namespace Org.OpenAPITools.Extensions
+{
+ ///
+ /// Extension methods for IHttpClientBuilder
+ ///
+ public static class IHttpClientBuilderExtensions
+ {
+ ///
+ /// Adds a Polly retry policy to your clients.
+ ///
+ ///
+ ///
+ ///
+ public static IHttpClientBuilder AddRetryPolicy(this IHttpClientBuilder client, int retries)
+ {
+ client.AddPolicyHandler(RetryPolicy(retries));
+
+ return client;
+ }
+
+ ///
+ /// Adds a Polly timeout policy to your clients.
+ ///
+ ///
+ ///
+ ///
+ public static IHttpClientBuilder AddTimeoutPolicy(this IHttpClientBuilder client, TimeSpan timeout)
+ {
+ client.AddPolicyHandler(TimeoutPolicy(timeout));
+
+ return client;
+ }
+
+ ///
+ /// Adds a Polly circuit breaker to your clients.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static IHttpClientBuilder AddCircuitBreakerPolicy(this IHttpClientBuilder client, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak)
+ {
+ client.AddTransientHttpErrorPolicy(builder => CircuitBreakerPolicy(builder, handledEventsAllowedBeforeBreaking, durationOfBreak));
+
+ return client;
+ }
+
+ private static Polly.Retry.AsyncRetryPolicy RetryPolicy(int retries)
+ => HttpPolicyExtensions
+ .HandleTransientHttpError()
+ .Or()
+ .RetryAsync(retries);
+
+ private static AsyncTimeoutPolicy TimeoutPolicy(TimeSpan timeout)
+ => Policy.TimeoutAsync(timeout);
+
+ private static Polly.CircuitBreaker.AsyncCircuitBreakerPolicy CircuitBreakerPolicy(
+ PolicyBuilder builder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak)
+ => builder.CircuitBreakerAsync(handledEventsAllowedBeforeBreaking, durationOfBreak);
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs
new file mode 100644
index 00000000000..3995735c8ce
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs
@@ -0,0 +1,71 @@
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Linq;
+using Microsoft.Extensions.DependencyInjection;
+using Org.OpenAPITools.Client;
+
+namespace Org.OpenAPITools.Extensions
+{
+ ///
+ /// Extension methods for IServiceCollection
+ ///
+ public static class IServiceCollectionExtensions
+ {
+ ///
+ /// Add the api to your host builder.
+ ///
+ ///
+ public static void AddApi(this IServiceCollection services)
+ {
+ HostConfiguration config = new HostConfiguration(services);
+ AddApi(services, config);
+ }
+
+ ///
+ /// Add the api to your host builder.
+ ///
+ ///
+ ///
+ public static void AddApi(this IServiceCollection services, Action options)
+ {
+ HostConfiguration config = new HostConfiguration(services);
+ options(config);
+ AddApi(services, config);
+ }
+
+ internal static void AddApi(IServiceCollection services, HostConfiguration host)
+ {
+ if (!host.HttpClientsAdded)
+ host.AddApiHttpClients();
+
+ services.AddSingleton();
+
+ // ensure that a token provider was provided for this token type
+ // if not, default to RateLimitProvider
+ var containerServices = services.Where(s => s.ServiceType.IsGenericType &&
+ s.ServiceType.GetGenericTypeDefinition().IsAssignableFrom(typeof(TokenContainer<>))).ToArray();
+
+ foreach(var containerService in containerServices)
+ {
+ var tokenType = containerService.ServiceType.GenericTypeArguments[0];
+
+ var provider = services.FirstOrDefault(s => s.ServiceType.IsAssignableFrom(typeof(TokenProvider<>).MakeGenericType(tokenType)));
+
+ if (provider == null)
+ {
+ services.AddSingleton(typeof(RateLimitProvider<>).MakeGenericType(tokenType));
+ services.AddSingleton(typeof(TokenProvider<>).MakeGenericType(tokenType),
+ s => s.GetRequiredService(typeof(RateLimitProvider<>).MakeGenericType(tokenType)));
+ }
+ }
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Model/Adult.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Model/Adult.cs
new file mode 100644
index 00000000000..7806add08bd
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Model/Adult.cs
@@ -0,0 +1,205 @@
+//
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using System.ComponentModel.DataAnnotations;
+using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils;
+using Org.OpenAPITools.Client;
+
+namespace Org.OpenAPITools.Model
+{
+ ///
+ /// A representation of an adult
+ ///
+ public partial class Adult : Person, IValidatableObject
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// children
+ /// firstName
+ /// lastName
+ [JsonConstructor]
+ public Adult(Option> children = default, Option firstName = default, Option lastName = default) : base(firstName, lastName)
+ {
+ ChildrenOption = children;
+ OnCreated();
+ }
+
+ partial void OnCreated();
+
+ ///
+ /// Used to track the state of Children
+ ///
+ [JsonIgnore]
+ [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
+ public Option> ChildrenOption { get; private set; }
+
+ ///
+ /// Gets or Sets Children
+ ///
+ [JsonPropertyName("children")]
+ public List Children { get { return this.ChildrenOption; } set { this.ChildrenOption = new Option>(value); } }
+
+ ///
+ /// The discriminator
+ ///
+ [JsonIgnore]
+ [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
+ public new string Type { get; } = "Adult";
+
+ ///
+ /// Returns the string presentation of the object
+ ///
+ /// String presentation of the object
+ public override string ToString()
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.Append("class Adult {\n");
+ sb.Append(" ").Append(base.ToString()?.Replace("\n", "\n ")).Append("\n");
+ sb.Append(" Children: ").Append(Children).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+ }
+
+ ///
+ /// A Json converter for type
+ ///
+ public class AdultJsonConverter : JsonConverter
+ {
+ ///
+ /// Deserializes json to
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public override Adult Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions)
+ {
+ int currentDepth = utf8JsonReader.CurrentDepth;
+
+ if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray)
+ throw new JsonException();
+
+ JsonTokenType startingTokenType = utf8JsonReader.TokenType;
+
+ Option> children = default;
+ Option firstName = default;
+ Option lastName = default;
+ Option type = default;
+
+ while (utf8JsonReader.Read())
+ {
+ if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth)
+ break;
+
+ if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth)
+ break;
+
+ if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1)
+ {
+ string localVarJsonPropertyName = utf8JsonReader.GetString();
+ utf8JsonReader.Read();
+
+ switch (localVarJsonPropertyName)
+ {
+ case "children":
+ if (utf8JsonReader.TokenType != JsonTokenType.Null)
+ children = new Option>(JsonSerializer.Deserialize>(ref utf8JsonReader, jsonSerializerOptions));
+ break;
+ case "firstName":
+ firstName = new Option(utf8JsonReader.GetString());
+ break;
+ case "lastName":
+ lastName = new Option(utf8JsonReader.GetString());
+ break;
+ case "$_type":
+ type = new Option(utf8JsonReader.GetString());
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ if (children.IsSet && children.Value == null)
+ throw new ArgumentNullException(nameof(children), "Property is not nullable for class Adult.");
+
+ if (firstName.IsSet && firstName.Value == null)
+ throw new ArgumentNullException(nameof(firstName), "Property is not nullable for class Adult.");
+
+ if (lastName.IsSet && lastName.Value == null)
+ throw new ArgumentNullException(nameof(lastName), "Property is not nullable for class Adult.");
+
+ if (type.IsSet && type.Value == null)
+ throw new ArgumentNullException(nameof(type), "Property is not nullable for class Adult.");
+
+ return new Adult(children, firstName, lastName);
+ }
+
+ ///
+ /// Serializes a
+ ///
+ ///
+ ///
+ ///
+ ///
+ public override void Write(Utf8JsonWriter writer, Adult adult, JsonSerializerOptions jsonSerializerOptions)
+ {
+ writer.WriteStartObject();
+
+ WriteProperties(writer, adult, jsonSerializerOptions);
+ writer.WriteEndObject();
+ }
+
+ ///
+ /// Serializes the properties of
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void WriteProperties(Utf8JsonWriter writer, Adult adult, JsonSerializerOptions jsonSerializerOptions)
+ {
+ if (adult.ChildrenOption.IsSet && adult.Children == null)
+ throw new ArgumentNullException(nameof(adult.Children), "Property is required for class Adult.");
+
+ if (adult.FirstNameOption.IsSet && adult.FirstName == null)
+ throw new ArgumentNullException(nameof(adult.FirstName), "Property is required for class Adult.");
+
+ if (adult.LastNameOption.IsSet && adult.LastName == null)
+ throw new ArgumentNullException(nameof(adult.LastName), "Property is required for class Adult.");
+
+ if (adult.ChildrenOption.IsSet)
+ {
+ writer.WritePropertyName("children");
+ JsonSerializer.Serialize(writer, adult.Children, jsonSerializerOptions);
+ }
+ if (adult.FirstNameOption.IsSet)
+ writer.WriteString("firstName", adult.FirstName);
+
+ if (adult.LastNameOption.IsSet)
+ writer.WriteString("lastName", adult.LastName);
+
+ writer.WriteString("$_type", adult.Type);
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Model/Child.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Model/Child.cs
new file mode 100644
index 00000000000..35adb6d4880
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Model/Child.cs
@@ -0,0 +1,227 @@
+//
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using System.ComponentModel.DataAnnotations;
+using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils;
+using Org.OpenAPITools.Client;
+
+namespace Org.OpenAPITools.Model
+{
+ ///
+ /// A representation of a child
+ ///
+ public partial class Child : Person, IValidatableObject
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// age
+ /// firstName
+ /// lastName
+ /// boosterSeat
+ [JsonConstructor]
+ public Child(Option age = default, Option firstName = default, Option lastName = default, Option boosterSeat = default) : base(firstName, lastName)
+ {
+ AgeOption = age;
+ BoosterSeatOption = boosterSeat;
+ OnCreated();
+ }
+
+ partial void OnCreated();
+
+ ///
+ /// Used to track the state of Age
+ ///
+ [JsonIgnore]
+ [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
+ public Option AgeOption { get; private set; }
+
+ ///
+ /// Gets or Sets Age
+ ///
+ [JsonPropertyName("age")]
+ public int? Age { get { return this.AgeOption; } set { this.AgeOption = new Option(value); } }
+
+ ///
+ /// The discriminator
+ ///
+ [JsonIgnore]
+ [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
+ public new string Type { get; } = "Child";
+
+ ///
+ /// Used to track the state of BoosterSeat
+ ///
+ [JsonIgnore]
+ [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
+ public Option BoosterSeatOption { get; private set; }
+
+ ///
+ /// Gets or Sets BoosterSeat
+ ///
+ [JsonPropertyName("boosterSeat")]
+ public bool? BoosterSeat { get { return this.BoosterSeatOption; } set { this.BoosterSeatOption = new Option(value); } }
+
+ ///
+ /// Returns the string presentation of the object
+ ///
+ /// String presentation of the object
+ public override string ToString()
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.Append("class Child {\n");
+ sb.Append(" ").Append(base.ToString()?.Replace("\n", "\n ")).Append("\n");
+ sb.Append(" Age: ").Append(Age).Append("\n");
+ sb.Append(" BoosterSeat: ").Append(BoosterSeat).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+ }
+
+ ///
+ /// A Json converter for type
+ ///
+ public class ChildJsonConverter : JsonConverter
+ {
+ ///
+ /// Deserializes json to
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public override Child Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions)
+ {
+ int currentDepth = utf8JsonReader.CurrentDepth;
+
+ if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray)
+ throw new JsonException();
+
+ JsonTokenType startingTokenType = utf8JsonReader.TokenType;
+
+ Option age = default;
+ Option firstName = default;
+ Option lastName = default;
+ Option type = default;
+ Option boosterSeat = default;
+
+ while (utf8JsonReader.Read())
+ {
+ if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth)
+ break;
+
+ if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth)
+ break;
+
+ if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1)
+ {
+ string localVarJsonPropertyName = utf8JsonReader.GetString();
+ utf8JsonReader.Read();
+
+ switch (localVarJsonPropertyName)
+ {
+ case "age":
+ if (utf8JsonReader.TokenType != JsonTokenType.Null)
+ age = new Option(utf8JsonReader.GetInt32());
+ break;
+ case "firstName":
+ firstName = new Option(utf8JsonReader.GetString());
+ break;
+ case "lastName":
+ lastName = new Option(utf8JsonReader.GetString());
+ break;
+ case "$_type":
+ type = new Option(utf8JsonReader.GetString());
+ break;
+ case "boosterSeat":
+ if (utf8JsonReader.TokenType != JsonTokenType.Null)
+ boosterSeat = new Option(utf8JsonReader.GetBoolean());
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ if (age.IsSet && age.Value == null)
+ throw new ArgumentNullException(nameof(age), "Property is not nullable for class Child.");
+
+ if (firstName.IsSet && firstName.Value == null)
+ throw new ArgumentNullException(nameof(firstName), "Property is not nullable for class Child.");
+
+ if (lastName.IsSet && lastName.Value == null)
+ throw new ArgumentNullException(nameof(lastName), "Property is not nullable for class Child.");
+
+ if (type.IsSet && type.Value == null)
+ throw new ArgumentNullException(nameof(type), "Property is not nullable for class Child.");
+
+ if (boosterSeat.IsSet && boosterSeat.Value == null)
+ throw new ArgumentNullException(nameof(boosterSeat), "Property is not nullable for class Child.");
+
+ return new Child(age, firstName, lastName, boosterSeat);
+ }
+
+ ///
+ /// Serializes a
+ ///
+ ///
+ ///
+ ///
+ ///
+ public override void Write(Utf8JsonWriter writer, Child child, JsonSerializerOptions jsonSerializerOptions)
+ {
+ writer.WriteStartObject();
+
+ WriteProperties(writer, child, jsonSerializerOptions);
+ writer.WriteEndObject();
+ }
+
+ ///
+ /// Serializes the properties of
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void WriteProperties(Utf8JsonWriter writer, Child child, JsonSerializerOptions jsonSerializerOptions)
+ {
+ if (child.FirstNameOption.IsSet && child.FirstName == null)
+ throw new ArgumentNullException(nameof(child.FirstName), "Property is required for class Child.");
+
+ if (child.LastNameOption.IsSet && child.LastName == null)
+ throw new ArgumentNullException(nameof(child.LastName), "Property is required for class Child.");
+
+ if (child.AgeOption.IsSet)
+ writer.WriteNumber("age", child.AgeOption.Value.Value);
+
+ if (child.FirstNameOption.IsSet)
+ writer.WriteString("firstName", child.FirstName);
+
+ if (child.LastNameOption.IsSet)
+ writer.WriteString("lastName", child.LastName);
+
+ writer.WriteString("$_type", child.Type);
+
+ if (child.BoosterSeatOption.IsSet)
+ writer.WriteBoolean("boosterSeat", child.BoosterSeatOption.Value.Value);
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Model/Person.cs b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Model/Person.cs
new file mode 100644
index 00000000000..88d20491e28
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Model/Person.cs
@@ -0,0 +1,247 @@
+//
+/*
+ * Example
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using System.ComponentModel.DataAnnotations;
+using OpenAPIClientUtils = Org.OpenAPITools.Client.ClientUtils;
+using Org.OpenAPITools.Client;
+
+namespace Org.OpenAPITools.Model
+{
+ ///
+ /// Person
+ ///
+ public partial class Person : IValidatableObject
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// firstName
+ /// lastName
+ [JsonConstructor]
+ public Person(Option firstName = default, Option lastName = default)
+ {
+ FirstNameOption = firstName;
+ LastNameOption = lastName;
+ OnCreated();
+ }
+
+ partial void OnCreated();
+
+ ///
+ /// Used to track the state of FirstName
+ ///
+ [JsonIgnore]
+ [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
+ public Option FirstNameOption { get; private set; }
+
+ ///
+ /// Gets or Sets FirstName
+ ///
+ [JsonPropertyName("firstName")]
+ public string FirstName { get { return this.FirstNameOption; } set { this.FirstNameOption = new Option(value); } }
+
+ ///
+ /// Used to track the state of LastName
+ ///
+ [JsonIgnore]
+ [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
+ public Option LastNameOption { get; private set; }
+
+ ///
+ /// Gets or Sets LastName
+ ///
+ [JsonPropertyName("lastName")]
+ public string LastName { get { return this.LastNameOption; } set { this.LastNameOption = new Option(value); } }
+
+ ///
+ /// The discriminator
+ ///
+ [JsonIgnore]
+ [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
+ public string Type { get; } = "Person";
+
+ ///
+ /// Gets or Sets additional properties
+ ///
+ [JsonExtensionData]
+ public Dictionary AdditionalProperties { get; } = new Dictionary();
+
+ ///
+ /// Returns the string presentation of the object
+ ///
+ /// String presentation of the object
+ public override string ToString()
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.Append("class Person {\n");
+ sb.Append(" FirstName: ").Append(FirstName).Append("\n");
+ sb.Append(" LastName: ").Append(LastName).Append("\n");
+ sb.Append(" AdditionalProperties: ").Append(AdditionalProperties).Append("\n");
+ sb.Append("}\n");
+ return sb.ToString();
+ }
+
+ ///
+ /// To validate all properties of the instance
+ ///
+ /// Validation context
+ /// Validation Result
+ IEnumerable IValidatableObject.Validate(ValidationContext validationContext)
+ {
+ return this.BaseValidate(validationContext);
+ }
+
+ ///
+ /// To validate all properties of the instance
+ ///
+ /// Validation context
+ /// Validation Result
+ protected IEnumerable BaseValidate(ValidationContext validationContext)
+ {
+ yield break;
+ }
+ }
+
+ ///
+ /// A Json converter for type
+ ///
+ public class PersonJsonConverter : JsonConverter
+ {
+ ///
+ /// Deserializes json to
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public override Person Read(ref Utf8JsonReader utf8JsonReader, Type typeToConvert, JsonSerializerOptions jsonSerializerOptions)
+ {
+ int currentDepth = utf8JsonReader.CurrentDepth;
+
+ if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray)
+ throw new JsonException();
+
+ JsonTokenType startingTokenType = utf8JsonReader.TokenType;
+
+ Option firstName = default;
+ Option lastName = default;
+ Option type = default;
+
+ string discriminator = ClientUtils.GetDiscriminator(utf8JsonReader, "$_type");
+
+ if (discriminator != null && discriminator.Equals("Adult"))
+ return JsonSerializer.Deserialize(ref utf8JsonReader, jsonSerializerOptions) ?? throw new JsonException("The result was an unexpected value.");
+
+ if (discriminator != null && discriminator.Equals("Child"))
+ return JsonSerializer.Deserialize(ref utf8JsonReader, jsonSerializerOptions) ?? throw new JsonException("The result was an unexpected value.");
+
+ while (utf8JsonReader.Read())
+ {
+ if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth)
+ break;
+
+ if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth)
+ break;
+
+ if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1)
+ {
+ string localVarJsonPropertyName = utf8JsonReader.GetString();
+ utf8JsonReader.Read();
+
+ switch (localVarJsonPropertyName)
+ {
+ case "firstName":
+ firstName = new Option(utf8JsonReader.GetString());
+ break;
+ case "lastName":
+ lastName = new Option(utf8JsonReader.GetString());
+ break;
+ case "$_type":
+ type = new Option(utf8JsonReader.GetString());
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ if (firstName.IsSet && firstName.Value == null)
+ throw new ArgumentNullException(nameof(firstName), "Property is not nullable for class Person.");
+
+ if (lastName.IsSet && lastName.Value == null)
+ throw new ArgumentNullException(nameof(lastName), "Property is not nullable for class Person.");
+
+ if (type.IsSet && type.Value == null)
+ throw new ArgumentNullException(nameof(type), "Property is not nullable for class Person.");
+
+ return new Person(firstName, lastName);
+ }
+
+ ///
+ /// Serializes a
+ ///
+ ///
+ ///
+ ///
+ ///
+ public override void Write(Utf8JsonWriter writer, Person person, JsonSerializerOptions jsonSerializerOptions)
+ {
+ if (person is Adult adult){
+ JsonSerializer.Serialize(writer, adult, jsonSerializerOptions);
+ return;
+ }
+
+ if (person is Child child){
+ JsonSerializer.Serialize(writer, child, jsonSerializerOptions);
+ return;
+ }
+
+ writer.WriteStartObject();
+
+ WriteProperties(writer, person, jsonSerializerOptions);
+ writer.WriteEndObject();
+ }
+
+ ///
+ /// Serializes the properties of
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void WriteProperties(Utf8JsonWriter writer, Person person, JsonSerializerOptions jsonSerializerOptions)
+ {
+ if (person.FirstNameOption.IsSet && person.FirstName == null)
+ throw new ArgumentNullException(nameof(person.FirstName), "Property is required for class Person.");
+
+ if (person.LastNameOption.IsSet && person.LastName == null)
+ throw new ArgumentNullException(nameof(person.LastName), "Property is required for class Person.");
+
+ if (person.FirstNameOption.IsSet)
+ writer.WriteString("firstName", person.FirstName);
+
+ if (person.LastNameOption.IsSet)
+ writer.WriteString("lastName", person.LastName);
+
+ writer.WriteString("$_type", person.Type);
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Org.OpenAPITools.csproj b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Org.OpenAPITools.csproj
new file mode 100644
index 00000000000..73a85280057
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/Org.OpenAPITools.csproj
@@ -0,0 +1,33 @@
+
+
+
+ true
+ net48
+ Org.OpenAPITools
+ Org.OpenAPITools
+ Library
+ OpenAPI
+ OpenAPI
+ OpenAPI Library
+ A library generated from a OpenAPI doc
+ No Copyright
+ Org.OpenAPITools
+ 1.0.0
+ bin\$(Configuration)\$(TargetFramework)\Org.OpenAPITools.xml
+ https://github.com/GIT_USER_ID/GIT_REPO_ID.git
+ git
+ Minor update
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/README.md b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/README.md
new file mode 100644
index 00000000000..2a8e22d046f
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AllOf/src/Org.OpenAPITools/README.md
@@ -0,0 +1,177 @@
+# Created with Openapi Generator
+
+
+## Run the following powershell command to generate the library
+
+```ps1
+$properties = @(
+ 'apiName=Api',
+ 'targetFramework=net48',
+ 'validatable=true',
+ 'nullableReferenceTypes=false',
+ 'hideGenerationTimestamp=true',
+ 'packageVersion=1.0.0',
+ 'packageAuthors=OpenAPI',
+ 'packageCompany=OpenAPI',
+ 'packageCopyright=No Copyright',
+ 'packageDescription=A library generated from a OpenAPI doc',
+ 'packageName=Org.OpenAPITools',
+ 'packageTags=',
+ 'packageTitle=OpenAPI Library'
+) -join ","
+
+$global = @(
+ 'apiDocs=true',
+ 'modelDocs=true',
+ 'apiTests=true',
+ 'modelTests=true'
+) -join ","
+
+java -jar "/openapi-generator/modules/openapi-generator-cli/target/openapi-generator-cli.jar" generate `
+ -g csharp-netcore `
+ -i .yaml `
+ -o `
+ --library generichost `
+ --additional-properties $properties `
+ --global-property $global `
+ --git-host "github.com" `
+ --git-repo-id "GIT_REPO_ID" `
+ --git-user-id "GIT_USER_ID" `
+ --release-note "Minor update"
+ # -t templates
+```
+
+
+## Using the library in your project
+
+```cs
+using System;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.DependencyInjection;
+using Org.OpenAPITools.Api;
+using Org.OpenAPITools.Client;
+using Org.OpenAPITools.Model;
+
+namespace YourProject
+{
+ public class Program
+ {
+ public static async Task Main(string[] args)
+ {
+ var host = CreateHostBuilder(args).Build();
+ var api = host.Services.GetRequiredService();
+ ListApiResponse apiResponse = await api.ListAsync("todo");
+ Person model = apiResponse.Ok();
+ }
+
+ public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
+ .ConfigureApi((context, options) =>
+ {
+ options.ConfigureJsonOptions((jsonOptions) =>
+ {
+ // your custom converters if any
+ });
+
+ options.AddApiHttpClients(builder: builder => builder
+ .AddRetryPolicy(2)
+ .AddTimeoutPolicy(TimeSpan.FromSeconds(5))
+ .AddCircuitBreakerPolicy(10, TimeSpan.FromSeconds(30))
+ // add whatever middleware you prefer
+ );
+ });
+ }
+}
+```
+
+## Questions
+
+- What about HttpRequest failures and retries?
+ If supportsRetry is enabled, you can configure Polly in the ConfigureClients method.
+- How are tokens used?
+ Tokens are provided by a TokenProvider class. The default is RateLimitProvider which will perform client side rate limiting.
+ Other providers can be used with the UseProvider method.
+- Does an HttpRequest throw an error when the server response is not Ok?
+ It depends how you made the request. If the return type is ApiResponse no error will be thrown, though the Content property will be null.
+ StatusCode and ReasonPhrase will contain information about the error.
+ If the return type is T, then it will throw. If the return type is TOrDefault, it will return null.
+- How do I validate requests and process responses?
+ Use the provided On and After methods in the Api class from the namespace Org.OpenAPITools.Rest.DefaultApi.
+ Or provide your own class by using the generic ConfigureApi method.
+
+
+## Dependencies
+
+- [Microsoft.Extensions.Hosting](https://www.nuget.org/packages/Microsoft.Extensions.Hosting/) - 5.0.0 or later
+- [Microsoft.Extensions.Http](https://www.nuget.org/packages/Microsoft.Extensions.Http/) - 5.0.0 or later
+- [Microsoft.Extensions.Http.Polly](https://www.nuget.org/packages/Microsoft.Extensions.Http.Polly/) - 5.0.1 or later
+- [CompareNETObjects](https://www.nuget.org/packages/CompareNETObjects) - 4.61.0 or later
+- [System.ComponentModel.Annotations](https://www.nuget.org/packages/System.ComponentModel.Annotations) - 4.7.0 or later
+
+
+## Documentation for Authorization
+
+Endpoints do not require authorization.
+
+
+## Build
+- SDK version: 1.0.0
+- Generator version: 7.7.0-SNAPSHOT
+- Build package: org.openapitools.codegen.languages.CSharpClientCodegen
+
+## Api Information
+- appName: Example
+- appVersion: 1.0.0
+- appDescription: No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+
+## [OpenApi Global properties](https://openapi-generator.tech/docs/globals)
+- generateAliasAsModel:
+- supportingFiles:
+- models: omitted for brevity
+- apis: omitted for brevity
+- apiDocs: true
+- modelDocs: true
+- apiTests: true
+- modelTests: true
+
+## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore)
+- allowUnicodeIdentifiers:
+- apiName: Api
+- caseInsensitiveResponseHeaders:
+- conditionalSerialization: false
+- disallowAdditionalPropertiesIfNotPresent: false
+- gitHost: github.com
+- gitRepoId: GIT_REPO_ID
+- gitUserId: GIT_USER_ID
+- hideGenerationTimestamp: true
+- interfacePrefix: I
+- library: generichost
+- licenseId:
+- modelPropertyNaming:
+- netCoreProjectFile: false
+- nonPublicApi: false
+- nullableReferenceTypes: false
+- optionalAssemblyInfo:
+- optionalEmitDefaultValues: false
+- optionalMethodArgument: true
+- optionalProjectFile:
+- packageAuthors: OpenAPI
+- packageCompany: OpenAPI
+- packageCopyright: No Copyright
+- packageDescription: A library generated from a OpenAPI doc
+- packageGuid: {321C8C3F-0156-40C1-AE42-D59761FB9B6C}
+- packageName: Org.OpenAPITools
+- packageTags:
+- packageTitle: OpenAPI Library
+- packageVersion: 1.0.0
+- releaseNote: Minor update
+- returnICollection: false
+- sortParamsByRequiredFlag:
+- sourceFolder: src
+- targetFramework: net48
+- useCollection: false
+- useDateTimeOffset: false
+- useOneOfDiscriminatorLookup: false
+- validatable: true
+
+This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.gitignore b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.gitignore
new file mode 100644
index 00000000000..1ee53850b84
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.gitignore
@@ -0,0 +1,362 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
+
+# Fody - auto-generated XML schema
+FodyWeavers.xsd
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator-ignore b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator-ignore
new file mode 100644
index 00000000000..7484ee590a3
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator-ignore
@@ -0,0 +1,23 @@
+# OpenAPI Generator Ignore
+# Generated by openapi-generator https://github.com/openapitools/openapi-generator
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator/FILES
new file mode 100644
index 00000000000..59cc1ea25a0
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator/FILES
@@ -0,0 +1,40 @@
+.gitignore
+Org.OpenAPITools.sln
+README.md
+api/openapi.yaml
+appveyor.yml
+docs/apis/DefaultApi.md
+docs/models/Apple.md
+docs/models/Banana.md
+docs/models/Fruit.md
+docs/scripts/git_push.ps1
+docs/scripts/git_push.sh
+src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs
+src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj
+src/Org.OpenAPITools.Test/README.md
+src/Org.OpenAPITools/Api/DefaultApi.cs
+src/Org.OpenAPITools/Api/IApi.cs
+src/Org.OpenAPITools/Client/ApiException.cs
+src/Org.OpenAPITools/Client/ApiFactory.cs
+src/Org.OpenAPITools/Client/ApiResponseEventArgs.cs
+src/Org.OpenAPITools/Client/ApiResponse`1.cs
+src/Org.OpenAPITools/Client/ClientUtils.cs
+src/Org.OpenAPITools/Client/CookieContainer.cs
+src/Org.OpenAPITools/Client/DateTimeJsonConverter.cs
+src/Org.OpenAPITools/Client/DateTimeNullableJsonConverter.cs
+src/Org.OpenAPITools/Client/ExceptionEventArgs.cs
+src/Org.OpenAPITools/Client/HostConfiguration.cs
+src/Org.OpenAPITools/Client/JsonSerializerOptionsProvider.cs
+src/Org.OpenAPITools/Client/Option.cs
+src/Org.OpenAPITools/Client/RateLimitProvider`1.cs
+src/Org.OpenAPITools/Client/TokenBase.cs
+src/Org.OpenAPITools/Client/TokenContainer`1.cs
+src/Org.OpenAPITools/Client/TokenProvider`1.cs
+src/Org.OpenAPITools/Extensions/IHostBuilderExtensions.cs
+src/Org.OpenAPITools/Extensions/IHttpClientBuilderExtensions.cs
+src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs
+src/Org.OpenAPITools/Model/Apple.cs
+src/Org.OpenAPITools/Model/Banana.cs
+src/Org.OpenAPITools/Model/Fruit.cs
+src/Org.OpenAPITools/Org.OpenAPITools.csproj
+src/Org.OpenAPITools/README.md
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator/VERSION b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator/VERSION
new file mode 100644
index 00000000000..7e7b8b9bc73
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/.openapi-generator/VERSION
@@ -0,0 +1 @@
+7.7.0-SNAPSHOT
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/Org.OpenAPITools.sln b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/Org.OpenAPITools.sln
new file mode 100644
index 00000000000..5b15451c9dc
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/Org.OpenAPITools.sln
@@ -0,0 +1,27 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+VisualStudioVersion = 12.0.0.0
+MinimumVisualStudioVersion = 10.0.0.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.OpenAPITools", "src\Org.OpenAPITools\Org.OpenAPITools.csproj", "{321C8C3F-0156-40C1-AE42-D59761FB9B6C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.OpenAPITools.Test", "src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj", "{19F1DEBC-DE5E-4517-8062-F000CD499087}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/README.md b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/README.md
new file mode 100644
index 00000000000..f9c1c7f7462
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/README.md
@@ -0,0 +1 @@
+# Created with Openapi Generator
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/api/openapi.yaml b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/api/openapi.yaml
new file mode 100644
index 00000000000..25b9adb5f50
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/api/openapi.yaml
@@ -0,0 +1,42 @@
+openapi: 3.0.1
+info:
+ title: fruity
+ version: 0.0.1
+servers:
+- url: /
+paths:
+ /:
+ get:
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/fruit'
+ description: desc
+components:
+ schemas:
+ fruit:
+ anyOf:
+ - $ref: '#/components/schemas/apple'
+ - $ref: '#/components/schemas/banana'
+ example:
+ color: color
+ properties:
+ color:
+ type: string
+ title: fruit
+ type: object
+ apple:
+ properties:
+ kind:
+ type: string
+ title: apple
+ type: object
+ banana:
+ properties:
+ count:
+ type: number
+ title: banana
+ type: object
+
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/appveyor.yml b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/appveyor.yml
new file mode 100644
index 00000000000..f76f63cee50
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/appveyor.yml
@@ -0,0 +1,9 @@
+# auto-generated by OpenAPI Generator (https://github.com/OpenAPITools/openapi-generator)
+#
+image: Visual Studio 2019
+clone_depth: 1
+build_script:
+- dotnet build -c Release
+- dotnet test -c Release
+after_build:
+- dotnet pack .\src\Org.OpenAPITools\Org.OpenAPITools.csproj -o ../../output -c Release --no-build
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/apis/DefaultApi.md b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/apis/DefaultApi.md
new file mode 100644
index 00000000000..bccf3af9c51
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/apis/DefaultApi.md
@@ -0,0 +1,90 @@
+# Org.OpenAPITools.Api.DefaultApi
+
+All URIs are relative to *http://localhost*
+
+| Method | HTTP request | Description |
+|--------|--------------|-------------|
+| [**RootGet**](DefaultApi.md#rootget) | **GET** / | |
+
+
+# **RootGet**
+> Fruit RootGet ()
+
+
+
+### Example
+```csharp
+using System.Collections.Generic;
+using System.Diagnostics;
+using Org.OpenAPITools.Api;
+using Org.OpenAPITools.Client;
+using Org.OpenAPITools.Model;
+
+namespace Example
+{
+ public class RootGetExample
+ {
+ public static void Main()
+ {
+ Configuration config = new Configuration();
+ config.BasePath = "http://localhost";
+ var apiInstance = new DefaultApi(config);
+
+ try
+ {
+ Fruit result = apiInstance.RootGet();
+ Debug.WriteLine(result);
+ }
+ catch (ApiException e)
+ {
+ Debug.Print("Exception when calling DefaultApi.RootGet: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+ }
+ }
+ }
+}
+```
+
+#### Using the RootGetWithHttpInfo variant
+This returns an ApiResponse object which contains the response data, status code and headers.
+
+```csharp
+try
+{
+ ApiResponse response = apiInstance.RootGetWithHttpInfo();
+ Debug.Write("Status Code: " + response.StatusCode);
+ Debug.Write("Response Headers: " + response.Headers);
+ Debug.Write("Response Body: " + response.Data);
+}
+catch (ApiException e)
+{
+ Debug.Print("Exception when calling DefaultApi.RootGetWithHttpInfo: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+}
+```
+
+### Parameters
+This endpoint does not need any parameter.
+### Return type
+
+[**Fruit**](Fruit.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | desc | - |
+
+[[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/generichost/net4.8/AnyOf/docs/models/Apple.md b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/models/Apple.md
new file mode 100644
index 00000000000..95f57583439
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/models/Apple.md
@@ -0,0 +1,10 @@
+# Org.OpenAPITools.Model.Apple
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Kind** | **string** | | [optional]
+
+[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md)
+
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/models/Banana.md b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/models/Banana.md
new file mode 100644
index 00000000000..c9aea6fb56c
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/models/Banana.md
@@ -0,0 +1,10 @@
+# Org.OpenAPITools.Model.Banana
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Count** | **decimal** | | [optional]
+
+[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md)
+
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/models/Fruit.md b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/models/Fruit.md
new file mode 100644
index 00000000000..b3bee18f7ba
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/models/Fruit.md
@@ -0,0 +1,10 @@
+# Org.OpenAPITools.Model.Fruit
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Color** | **string** | | [optional]
+
+[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md)
+
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/scripts/git_push.ps1 b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/scripts/git_push.ps1
new file mode 100644
index 00000000000..73ed35c2bb1
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/scripts/git_push.ps1
@@ -0,0 +1,75 @@
+param(
+ [Parameter()][Alias("g")][String]$GitHost = "github.com",
+ [Parameter()][Alias("u")][String]$GitUserId = "GIT_USER_ID",
+ [Parameter()][Alias("r")][String]$GitRepoId = "GIT_REPO_ID",
+ [Parameter()][Alias("m")][string]$Message = "Minor update",
+ [Parameter()][Alias("h")][switch]$Help
+)
+
+function Publish-ToGitHost{
+ if ([string]::IsNullOrWhiteSpace($Message) -or $Message -eq "Minor update"){
+ # it seems unlikely that we would want our git commit message to be the default, so lets prompt the user
+ $Message = Read-Host -Prompt "Please provide a commit message or press enter"
+ $Message = if([string]::IsNullOrWhiteSpace($Message)) { "no message provided" } else { $Message }
+ }
+
+ git init
+ git add .
+ git commit -am "${Message}"
+ $branchName=$(git rev-parse --abbrev-ref HEAD)
+ $gitRemote=$(git remote)
+
+ if([string]::IsNullOrWhiteSpace($gitRemote)){
+ git remote add origin https://${GitHost}/${GitUserId}/${GitRepoId}.git
+ }
+
+ Write-Output "Pulling from https://${GitHost}/${GitUserId}/${GitRepoId}.git"
+ git pull origin $branchName --ff-only
+
+ if ($LastExitCode -ne 0){
+ if (${GitHost} -eq "github.com"){
+ Write-Output "The ${GitRepoId} repository may not exist yet. Creating it now with the GitHub CLI."
+ gh auth login --hostname github.com --web
+ gh repo create $GitRepoId --private
+ # sleep 2 seconds to ensure git finishes creation of the repo
+ Start-Sleep -Seconds 2
+ }
+ else{
+ throw "There was an issue pulling the origin branch. The remote repository may not exist yet."
+ }
+ }
+
+ Write-Output "Pushing to https://${GitHost}/${GitUserId}/${GitRepoId}.git"
+ git push origin $branchName
+}
+
+$ErrorActionPreference = "Stop"
+Set-StrictMode -Version 3.0
+
+if ($Help){
+ Write-Output "
+ This script will initialize a git repository, then add and commit all files.
+ The local repository will then be pushed to your preferred git provider.
+ If the remote repository does not exist yet and you are using GitHub,
+ the repository will be created for you provided you have the GitHub CLI installed.
+
+ Parameters:
+ -g | -GitHost -> ex: github.com
+ -m | -Message -> the git commit message
+ -r | -GitRepoId -> the name of the repository
+ -u | -GitUserId -> your user id
+ "
+
+ return
+}
+
+$rootPath=Resolve-Path -Path $PSScriptRoot/../..
+
+Push-Location $rootPath
+
+try {
+ Publish-ToGitHost $GitHost $GitUserId $GitRepoId $Message
+}
+finally{
+ Pop-Location
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/scripts/git_push.sh b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/scripts/git_push.sh
new file mode 100644
index 00000000000..88210492218
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/docs/scripts/git_push.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
+#
+# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
+
+git_user_id=${1:-GIT_USER_ID}
+git_repo_id=${2:-GIT_REPO_ID}
+release_note=${3:-Minor update}
+git_host=${4:-github.com}
+
+starting_directory=$(pwd)
+script_root="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+cd $script_root
+cd ../..
+
+if [ "$release_note" = "" ] || [ "$release_note" = "Minor update" ]; then
+ # it seems unlikely that we would want our git commit message to be the default, so lets prompt the user
+ echo "Please provide a commit message or press enter"
+ read user_input
+ release_note=$user_input
+ if [ "$release_note" = "" ]; then
+ release_note="no message provided"
+ fi
+fi
+
+git init
+git add .
+git commit -am "$release_note"
+branch_name=$(git rev-parse --abbrev-ref HEAD)
+git_remote=$(git remote)
+
+if [ "$git_remote" = "" ]; then # git remote not defined
+
+ if [ "$GIT_TOKEN" = "" ]; then
+ echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
+ git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
+ else
+ git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
+ fi
+
+fi
+
+echo "[INFO] Pulling from https://${git_host}/${git_user_id}/${git_repo_id}.git"
+git pull origin $branch_name --ff-only
+
+echo "[INFO] Pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
+git push origin $branch_name
+
+cd $starting_directory
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Api/ApiTestsBase.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Api/ApiTestsBase.cs
new file mode 100644
index 00000000000..5a82cd6c99d
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Api/ApiTestsBase.cs
@@ -0,0 +1,58 @@
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Security.Cryptography;
+using Microsoft.Extensions.Hosting;
+using Org.OpenAPITools.Client;
+using Org.OpenAPITools.Extensions;
+
+
+/* *********************************************************************************
+* Follow these manual steps to construct tests.
+* This file will not be overwritten.
+* *********************************************************************************
+* 1. Navigate to ApiTests.Base.cs and ensure any tokens are being created correctly.
+* Take care not to commit credentials to any repository.
+*
+* 2. Mocking is coordinated by ApiTestsBase#AddApiHttpClients.
+* To mock the client, use the generic AddApiHttpClients.
+* To mock the server, change the client's BaseAddress.
+*
+* 3. Locate the test you want below
+* - remove the skip property from the Fact attribute
+* - set the value of any variables if necessary
+*
+* 4. Run the tests and ensure they work.
+*
+*/
+
+
+namespace Org.OpenAPITools.Test.Api
+{
+ ///
+ /// Base class for API tests
+ ///
+ public class ApiTestsBase
+ {
+ protected readonly IHost _host;
+
+ public ApiTestsBase(string[] args)
+ {
+ _host = CreateHostBuilder(args).Build();
+ }
+
+ public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
+ .ConfigureApi((context, services, options) =>
+ {
+
+ });
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Api/DefaultApiTests.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Api/DefaultApiTests.cs
new file mode 100644
index 00000000000..b7bcc281037
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Api/DefaultApiTests.cs
@@ -0,0 +1,64 @@
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Xunit;
+using Microsoft.Extensions.DependencyInjection;
+using Org.OpenAPITools.Api;
+using Org.OpenAPITools.Model;
+
+
+/* *********************************************************************************
+* Follow these manual steps to construct tests.
+* This file will not be overwritten.
+* *********************************************************************************
+* 1. Navigate to ApiTests.Base.cs and ensure any tokens are being created correctly.
+* Take care not to commit credentials to any repository.
+*
+* 2. Mocking is coordinated by ApiTestsBase#AddApiHttpClients.
+* To mock the client, use the generic AddApiHttpClients.
+* To mock the server, change the client's BaseAddress.
+*
+* 3. Locate the test you want below
+* - remove the skip property from the Fact attribute
+* - set the value of any variables if necessary
+*
+* 4. Run the tests and ensure they work.
+*
+*/
+
+
+namespace Org.OpenAPITools.Test.Api
+{
+ ///
+ /// Class for testing DefaultApi
+ ///
+ public sealed class DefaultApiTests : ApiTestsBase
+ {
+ private readonly IDefaultApi _instance;
+
+ public DefaultApiTests(): base(Array.Empty())
+ {
+ _instance = _host.Services.GetRequiredService();
+ }
+
+ ///
+ /// Test RootGet
+ ///
+ [Fact (Skip = "not implemented")]
+ public async Task RootGetAsyncTest()
+ {
+ var response = await _instance.RootGetAsync();
+ var model = response.Ok();
+ Assert.IsType(model);
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs
new file mode 100644
index 00000000000..c9833ec353e
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs
@@ -0,0 +1,103 @@
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.DependencyInjection;
+using System.Collections.Generic;
+using System.Security.Cryptography;
+using Org.OpenAPITools.Client;
+using Org.OpenAPITools.Api;
+using Org.OpenAPITools.Extensions;
+using Xunit;
+
+namespace Org.OpenAPITools.Test.Api
+{
+ ///
+ /// Tests the dependency injection.
+ ///
+ public class DependencyInjectionTest
+ {
+ private readonly IHost _hostUsingConfigureWithoutAClient =
+ Host.CreateDefaultBuilder(Array.Empty()).ConfigureApi((context, services, options) =>
+ {
+
+ })
+ .Build();
+
+ private readonly IHost _hostUsingConfigureWithAClient =
+ Host.CreateDefaultBuilder(Array.Empty()).ConfigureApi((context, services, options) =>
+ {
+
+ options.AddApiHttpClients(client => client.BaseAddress = new Uri(ClientUtils.BASE_ADDRESS));
+ })
+ .Build();
+
+ private readonly IHost _hostUsingAddWithoutAClient =
+ Host.CreateDefaultBuilder(Array.Empty()).ConfigureServices((host, services) =>
+ {
+ services.AddApi(options =>
+ {
+
+ });
+ })
+ .Build();
+
+ private readonly IHost _hostUsingAddWithAClient =
+ Host.CreateDefaultBuilder(Array.Empty()).ConfigureServices((host, services) =>
+ {
+ services.AddApi(options =>
+ {
+
+ options.AddApiHttpClients(client => client.BaseAddress = new Uri(ClientUtils.BASE_ADDRESS));
+ });
+ })
+ .Build();
+
+ ///
+ /// Test dependency injection when using the configure method
+ ///
+ [Fact]
+ public void ConfigureApiWithAClientTest()
+ {
+ var defaultApi = _hostUsingConfigureWithAClient.Services.GetRequiredService();
+ Assert.True(defaultApi.HttpClient.BaseAddress != null);
+ }
+
+ ///
+ /// Test dependency injection when using the configure method
+ ///
+ [Fact]
+ public void ConfigureApiWithoutAClientTest()
+ {
+ var defaultApi = _hostUsingConfigureWithoutAClient.Services.GetRequiredService();
+ Assert.True(defaultApi.HttpClient.BaseAddress != null);
+ }
+
+ ///
+ /// Test dependency injection when using the add method
+ ///
+ [Fact]
+ public void AddApiWithAClientTest()
+ {
+ var defaultApi = _hostUsingAddWithAClient.Services.GetRequiredService();
+ Assert.True(defaultApi.HttpClient.BaseAddress != null);
+ }
+
+ ///
+ /// Test dependency injection when using the add method
+ ///
+ [Fact]
+ public void AddApiWithoutAClientTest()
+ {
+ var defaultApi = _hostUsingAddWithoutAClient.Services.GetRequiredService();
+ Assert.True(defaultApi.HttpClient.BaseAddress != null);
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Model/AppleTests.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Model/AppleTests.cs
new file mode 100644
index 00000000000..483628b6a4a
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Model/AppleTests.cs
@@ -0,0 +1,65 @@
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+
+using Xunit;
+
+using System;
+using System.Linq;
+using System.IO;
+using System.Collections.Generic;
+using Org.OpenAPITools.Model;
+using Org.OpenAPITools.Client;
+using System.Reflection;
+
+namespace Org.OpenAPITools.Test.Model
+{
+ ///
+ /// Class for testing Apple
+ ///
+ ///
+ /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech).
+ /// Please update the test case below to test the model.
+ ///
+ public class AppleTests : IDisposable
+ {
+ // TODO uncomment below to declare an instance variable for Apple
+ //private Apple instance;
+
+ public AppleTests()
+ {
+ // TODO uncomment below to create an instance of Apple
+ //instance = new Apple();
+ }
+
+ public void Dispose()
+ {
+ // Cleanup when everything is done.
+ }
+
+ ///
+ /// Test an instance of Apple
+ ///
+ [Fact]
+ public void AppleInstanceTest()
+ {
+ // TODO uncomment below to test "IsType" Apple
+ //Assert.IsType(instance);
+ }
+
+ ///
+ /// Test the property 'Kind'
+ ///
+ [Fact]
+ public void KindTest()
+ {
+ // TODO unit test for the property 'Kind'
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Model/BananaTests.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Model/BananaTests.cs
new file mode 100644
index 00000000000..5befec8d7e5
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Model/BananaTests.cs
@@ -0,0 +1,65 @@
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+
+using Xunit;
+
+using System;
+using System.Linq;
+using System.IO;
+using System.Collections.Generic;
+using Org.OpenAPITools.Model;
+using Org.OpenAPITools.Client;
+using System.Reflection;
+
+namespace Org.OpenAPITools.Test.Model
+{
+ ///
+ /// Class for testing Banana
+ ///
+ ///
+ /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech).
+ /// Please update the test case below to test the model.
+ ///
+ public class BananaTests : IDisposable
+ {
+ // TODO uncomment below to declare an instance variable for Banana
+ //private Banana instance;
+
+ public BananaTests()
+ {
+ // TODO uncomment below to create an instance of Banana
+ //instance = new Banana();
+ }
+
+ public void Dispose()
+ {
+ // Cleanup when everything is done.
+ }
+
+ ///
+ /// Test an instance of Banana
+ ///
+ [Fact]
+ public void BananaInstanceTest()
+ {
+ // TODO uncomment below to test "IsType" Banana
+ //Assert.IsType(instance);
+ }
+
+ ///
+ /// Test the property 'Count'
+ ///
+ [Fact]
+ public void CountTest()
+ {
+ // TODO unit test for the property 'Count'
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Model/FruitTests.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Model/FruitTests.cs
new file mode 100644
index 00000000000..a6607ae5d56
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Model/FruitTests.cs
@@ -0,0 +1,65 @@
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+
+using Xunit;
+
+using System;
+using System.Linq;
+using System.IO;
+using System.Collections.Generic;
+using Org.OpenAPITools.Model;
+using Org.OpenAPITools.Client;
+using System.Reflection;
+
+namespace Org.OpenAPITools.Test.Model
+{
+ ///
+ /// Class for testing Fruit
+ ///
+ ///
+ /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech).
+ /// Please update the test case below to test the model.
+ ///
+ public class FruitTests : IDisposable
+ {
+ // TODO uncomment below to declare an instance variable for Fruit
+ //private Fruit instance;
+
+ public FruitTests()
+ {
+ // TODO uncomment below to create an instance of Fruit
+ //instance = new Fruit();
+ }
+
+ public void Dispose()
+ {
+ // Cleanup when everything is done.
+ }
+
+ ///
+ /// Test an instance of Fruit
+ ///
+ [Fact]
+ public void FruitInstanceTest()
+ {
+ // TODO uncomment below to test "IsType" Fruit
+ //Assert.IsType(instance);
+ }
+
+ ///
+ /// Test the property 'Color'
+ ///
+ [Fact]
+ public void ColorTest()
+ {
+ // TODO unit test for the property 'Color'
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj
new file mode 100644
index 00000000000..66afad92ec4
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj
@@ -0,0 +1,19 @@
+
+
+
+ Org.OpenAPITools.Test
+ Org.OpenAPITools.Test
+ net48
+ false
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/README.md b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools.Test/README.md
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Api/DefaultApi.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Api/DefaultApi.cs
new file mode 100644
index 00000000000..8ea8bdbe84e
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Api/DefaultApi.cs
@@ -0,0 +1,329 @@
+//
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using System.Net.Http;
+using System.Net.Http.Headers;
+using System.Text.Json;
+using Org.OpenAPITools.Client;
+using Org.OpenAPITools.Model;
+using System.Diagnostics.CodeAnalysis;
+
+namespace Org.OpenAPITools.Api
+{
+ ///
+ /// Represents a collection of functions to interact with the API endpoints
+ /// This class is registered as transient.
+ ///
+ public interface IDefaultApi : IApi
+ {
+ ///
+ /// The class containing the events
+ ///
+ DefaultApiEvents Events { get; }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Thrown when fails to make API call
+ /// Cancellation Token to cancel the request.
+ /// <>
+ Task RootGetAsync(System.Threading.CancellationToken cancellationToken = default);
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Cancellation Token to cancel the request.
+ /// <>
+ Task RootGetOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default);
+ }
+
+ ///
+ /// The
+ ///
+ public interface IRootGetApiResponse : Org.OpenAPITools.Client.IApiResponse, IOk
+ {
+ ///
+ /// Returns true if the response is 200 Ok
+ ///
+ ///
+ bool IsOk { get; }
+ }
+
+ ///
+ /// Represents a collection of functions to interact with the API endpoints
+ ///
+ public class DefaultApiEvents
+ {
+ ///
+ /// The event raised after the server response
+ ///
+ public event EventHandler OnRootGet;
+
+ ///
+ /// The event raised after an error querying the server
+ ///
+ public event EventHandler OnErrorRootGet;
+
+ internal void ExecuteOnRootGet(DefaultApi.RootGetApiResponse apiResponse)
+ {
+ OnRootGet?.Invoke(this, new ApiResponseEventArgs(apiResponse));
+ }
+
+ internal void ExecuteOnErrorRootGet(Exception exception)
+ {
+ OnErrorRootGet?.Invoke(this, new ExceptionEventArgs(exception));
+ }
+ }
+
+ ///
+ /// Represents a collection of functions to interact with the API endpoints
+ ///
+ public sealed partial class DefaultApi : IDefaultApi
+ {
+ private JsonSerializerOptions _jsonSerializerOptions;
+
+ ///
+ /// The logger factory
+ ///
+ public ILoggerFactory LoggerFactory { get; }
+
+ ///
+ /// The logger
+ ///
+ public ILogger Logger { get; }
+
+ ///
+ /// The HttpClient
+ ///
+ public HttpClient HttpClient { get; }
+
+ ///
+ /// The class containing the events
+ ///
+ public DefaultApiEvents Events { get; }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ public DefaultApi(ILogger logger, ILoggerFactory loggerFactory, HttpClient httpClient, JsonSerializerOptionsProvider jsonSerializerOptionsProvider, DefaultApiEvents defaultApiEvents)
+ {
+ _jsonSerializerOptions = jsonSerializerOptionsProvider.Options;
+ LoggerFactory = loggerFactory;
+ Logger = LoggerFactory.CreateLogger();
+ HttpClient = httpClient;
+ Events = defaultApiEvents;
+ }
+
+ ///
+ /// Processes the server response
+ ///
+ ///
+ private void AfterRootGetDefaultImplementation(IRootGetApiResponse apiResponseLocalVar)
+ {
+ bool suppressDefaultLog = false;
+ AfterRootGet(ref suppressDefaultLog, apiResponseLocalVar);
+ if (!suppressDefaultLog)
+ Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path);
+ }
+
+ ///
+ /// Processes the server response
+ ///
+ ///
+ ///
+ partial void AfterRootGet(ref bool suppressDefaultLog, IRootGetApiResponse apiResponseLocalVar);
+
+ ///
+ /// Logs exceptions that occur while retrieving the server response
+ ///
+ ///
+ ///
+ ///
+ private void OnErrorRootGetDefaultImplementation(Exception exception, string pathFormat, string path)
+ {
+ bool suppressDefaultLog = false;
+ OnErrorRootGet(ref suppressDefaultLog, exception, pathFormat, path);
+ if (!suppressDefaultLog)
+ Logger.LogError(exception, "An error occurred while sending the request to the server.");
+ }
+
+ ///
+ /// A partial method that gives developers a way to provide customized exception handling
+ ///
+ ///
+ ///
+ ///
+ ///
+ partial void OnErrorRootGet(ref bool suppressDefaultLog, Exception exception, string pathFormat, string path);
+
+ ///
+ ///
+ ///
+ /// Cancellation Token to cancel the request.
+ /// <>
+ public async Task RootGetOrDefaultAsync(System.Threading.CancellationToken cancellationToken = default)
+ {
+ try
+ {
+ return await RootGetAsync(cancellationToken).ConfigureAwait(false);
+ }
+ catch (Exception)
+ {
+ return null;
+ }
+ }
+
+ ///
+ ///
+ ///
+ /// Thrown when fails to make API call
+ /// Cancellation Token to cancel the request.
+ /// <>
+ public async Task RootGetAsync(System.Threading.CancellationToken cancellationToken = default)
+ {
+ UriBuilder uriBuilderLocalVar = new UriBuilder();
+
+ try
+ {
+ using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage())
+ {
+ uriBuilderLocalVar.Host = HttpClient.BaseAddress.Host;
+ uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port;
+ uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme;
+ uriBuilderLocalVar.Path = ClientUtils.CONTEXT_PATH + "/";
+
+ httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri;
+
+ string[] acceptLocalVars = new string[] {
+ "application/json"
+ };
+
+ string acceptLocalVar = ClientUtils.SelectHeaderAccept(acceptLocalVars);
+
+ if (acceptLocalVar != null)
+ httpRequestMessageLocalVar.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(acceptLocalVar));
+ httpRequestMessageLocalVar.Method = new HttpMethod("GET");
+
+ DateTime requestedAtLocalVar = DateTime.UtcNow;
+
+ using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false))
+ {
+ string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync().ConfigureAwait(false);
+
+ ILogger apiResponseLoggerLocalVar = LoggerFactory.CreateLogger();
+
+ RootGetApiResponse apiResponseLocalVar = new RootGetApiResponse(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/", requestedAtLocalVar, _jsonSerializerOptions);
+
+ AfterRootGetDefaultImplementation(apiResponseLocalVar);
+
+ Events.ExecuteOnRootGet(apiResponseLocalVar);
+
+ return apiResponseLocalVar;
+ }
+ }
+ }
+ catch(Exception e)
+ {
+ OnErrorRootGetDefaultImplementation(e, "/", uriBuilderLocalVar.Path);
+ Events.ExecuteOnErrorRootGet(e);
+ throw;
+ }
+ }
+
+ ///
+ /// The
+ ///
+ public partial class RootGetApiResponse : Org.OpenAPITools.Client.ApiResponse, IRootGetApiResponse
+ {
+ ///
+ /// The logger
+ ///
+ public ILogger Logger { get; }
+
+ ///
+ /// The
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public RootGetApiResponse(ILogger logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions)
+ {
+ Logger = logger;
+ OnCreated(httpRequestMessage, httpResponseMessage);
+ }
+
+ partial void OnCreated(System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage);
+
+ ///
+ /// Returns true if the response is 200 Ok
+ ///
+ ///
+ public bool IsOk => 200 == (int)StatusCode;
+
+ ///
+ /// Deserializes the response if the response is 200 Ok
+ ///
+ ///
+ public Org.OpenAPITools.Model.Fruit Ok()
+ {
+ // This logic may be modified with the AsModel.mustache template
+ return IsOk
+ ? System.Text.Json.JsonSerializer.Deserialize(RawContent, _jsonSerializerOptions)
+ : default;
+ }
+
+ ///
+ /// Returns true if the response is 200 Ok and the deserialized response is not null
+ ///
+ ///
+ ///
+ public bool TryOk(out Org.OpenAPITools.Model.Fruit result)
+ {
+ result = null;
+
+ try
+ {
+ result = Ok();
+ } catch (Exception e)
+ {
+ OnDeserializationErrorDefaultImplementation(e, (HttpStatusCode)200);
+ }
+
+ return result != null;
+ }
+
+ private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode)
+ {
+ bool suppressDefaultLog = false;
+ OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode);
+ if (!suppressDefaultLog)
+ Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode);
+ }
+
+ partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode);
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Api/IApi.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Api/IApi.cs
new file mode 100644
index 00000000000..28520f043f2
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Api/IApi.cs
@@ -0,0 +1,15 @@
+using System.Net.Http;
+
+namespace Org.OpenAPITools.Api
+{
+ ///
+ /// Any Api client
+ ///
+ public interface IApi
+ {
+ ///
+ /// The HttpClient
+ ///
+ HttpClient HttpClient { get; }
+ }
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ApiException.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ApiException.cs
new file mode 100644
index 00000000000..1d43e69742f
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ApiException.cs
@@ -0,0 +1,50 @@
+//
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// API Exception
+ ///
+ public class ApiException : Exception
+ {
+ ///
+ /// The reason the api request failed
+ ///
+ public string ReasonPhrase { get; }
+
+ ///
+ /// The HttpStatusCode
+ ///
+ public System.Net.HttpStatusCode StatusCode { get; }
+
+ ///
+ /// The raw data returned by the api
+ ///
+ public string RawContent { get; }
+
+ ///
+ /// Construct the ApiException from parts of the response
+ ///
+ ///
+ ///
+ ///
+ public ApiException(string reasonPhrase, System.Net.HttpStatusCode statusCode, string rawContent) : base(reasonPhrase ?? rawContent)
+ {
+ ReasonPhrase = reasonPhrase;
+
+ StatusCode = statusCode;
+
+ RawContent = rawContent;
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ApiFactory.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ApiFactory.cs
new file mode 100644
index 00000000000..b9b27c613f8
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ApiFactory.cs
@@ -0,0 +1,49 @@
+using System;
+using Microsoft.Extensions.DependencyInjection;
+using Org.OpenAPITools.Api;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// An IApiFactory interface
+ ///
+ public interface IApiFactory
+ {
+ ///
+ /// A method to create an IApi of type IResult
+ ///
+ ///
+ ///
+ IResult Create() where IResult : IApi;
+ }
+
+ ///
+ /// An ApiFactory
+ ///
+ public class ApiFactory : IApiFactory
+ {
+ ///
+ /// The service provider
+ ///
+ public IServiceProvider Services { get; }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ public ApiFactory(IServiceProvider services)
+ {
+ Services = services;
+ }
+
+ ///
+ /// A method to create an IApi of type IResult
+ ///
+ ///
+ ///
+ public IResult Create() where IResult : IApi
+ {
+ return Services.GetRequiredService();
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ApiResponseEventArgs.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ApiResponseEventArgs.cs
new file mode 100644
index 00000000000..3cb65e5adc0
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ApiResponseEventArgs.cs
@@ -0,0 +1,24 @@
+using System;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Useful for tracking server health
+ ///
+ public class ApiResponseEventArgs : EventArgs
+ {
+ ///
+ /// The ApiResponse
+ ///
+ public ApiResponse ApiResponse { get; }
+
+ ///
+ /// The ApiResponseEventArgs
+ ///
+ ///
+ public ApiResponseEventArgs(ApiResponse apiResponse)
+ {
+ ApiResponse = apiResponse;
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ApiResponse`1.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ApiResponse`1.cs
new file mode 100644
index 00000000000..de1f5521df6
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ApiResponse`1.cs
@@ -0,0 +1,170 @@
+//
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Diagnostics.CodeAnalysis;
+using System.Net;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Provides a non-generic contract for the ApiResponse wrapper.
+ ///
+ public partial interface IApiResponse
+ {
+ ///
+ /// The IsSuccessStatusCode from the api response
+ ///
+ bool IsSuccessStatusCode { get; }
+
+ ///
+ /// Gets the status code (HTTP status code)
+ ///
+ /// The status code.
+ HttpStatusCode StatusCode { get; }
+
+ ///
+ /// The raw content of this response.
+ ///
+ string RawContent { get; }
+
+ ///
+ /// The DateTime when the request was retrieved.
+ ///
+ DateTime DownloadedAt { get; }
+
+ ///
+ /// The headers contained in the api response
+ ///
+ System.Net.Http.Headers.HttpResponseHeaders Headers { get; }
+
+ ///
+ /// The path used when making the request.
+ ///
+ string Path { get; }
+
+ ///
+ /// The reason phrase contained in the api response
+ ///
+ string ReasonPhrase { get; }
+
+ ///
+ /// The DateTime when the request was sent.
+ ///
+ DateTime RequestedAt { get; }
+
+ ///
+ /// The Uri used when making the request.
+ ///
+ Uri RequestUri { get; }
+ }
+
+ ///
+ /// API Response
+ ///
+ public partial class ApiResponse : IApiResponse
+ {
+ ///
+ /// Gets the status code (HTTP status code)
+ ///
+ /// The status code.
+ public HttpStatusCode StatusCode { get; }
+
+ ///
+ /// The raw data
+ ///
+ public string RawContent { get; protected set; }
+
+ ///
+ /// The IsSuccessStatusCode from the api response
+ ///
+ public bool IsSuccessStatusCode { get; }
+
+ ///
+ /// The reason phrase contained in the api response
+ ///
+ public string ReasonPhrase { get; }
+
+ ///
+ /// The headers contained in the api response
+ ///
+ public System.Net.Http.Headers.HttpResponseHeaders Headers { get; }
+
+ ///
+ /// The DateTime when the request was retrieved.
+ ///
+ public DateTime DownloadedAt { get; } = DateTime.UtcNow;
+
+ ///
+ /// The DateTime when the request was sent.
+ ///
+ public DateTime RequestedAt { get; }
+
+ ///
+ /// The path used when making the request.
+ ///
+ public string Path { get; }
+
+ ///
+ /// The Uri used when making the request.
+ ///
+ public Uri RequestUri { get; }
+
+ ///
+ /// The
+ ///
+ protected System.Text.Json.JsonSerializerOptions _jsonSerializerOptions;
+
+ ///
+ /// Construct the response using an HttpResponseMessage
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public ApiResponse(System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions)
+ {
+ StatusCode = httpResponseMessage.StatusCode;
+ Headers = httpResponseMessage.Headers;
+ IsSuccessStatusCode = httpResponseMessage.IsSuccessStatusCode;
+ ReasonPhrase = httpResponseMessage.ReasonPhrase;
+ RawContent = rawContent;
+ Path = path;
+ RequestUri = httpRequestMessage.RequestUri;
+ RequestedAt = requestedAt;
+ _jsonSerializerOptions = jsonSerializerOptions;
+ OnCreated(httpRequestMessage, httpResponseMessage);
+ }
+
+ partial void OnCreated(System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage);
+ }
+
+ ///
+ /// An interface for responses of type
+ ///
+ ///
+ public interface IOk : IApiResponse
+ {
+ ///
+ /// Deserializes the response if the response is Ok
+ ///
+ ///
+ TType Ok();
+
+ ///
+ /// Returns true if the response is Ok and the deserialized response is not null
+ ///
+ ///
+ ///
+ bool TryOk(out TType result);
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ClientUtils.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ClientUtils.cs
new file mode 100644
index 00000000000..91e5f4c09c0
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ClientUtils.cs
@@ -0,0 +1,329 @@
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.IO;
+using System.Linq;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using System.Text.Json;
+using System.Text.RegularExpressions;
+using KellermanSoftware.CompareNetObjects;
+using Org.OpenAPITools.Model;
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo("Org.OpenAPITools.Test")]
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Utility functions providing some benefit to API client consumers.
+ ///
+ public static class ClientUtils
+ {
+ ///
+ /// An instance of CompareLogic.
+ ///
+ public static CompareLogic compareLogic;
+
+ ///
+ /// Static constructor to initialise compareLogic.
+ ///
+ static ClientUtils()
+ {
+ ComparisonConfig comparisonConfig = new ComparisonConfig();
+ comparisonConfig.UseHashCodeIdentifier = true;
+ compareLogic = new CompareLogic(comparisonConfig);
+ }
+
+ ///
+ /// A delegate for events.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public delegate void EventHandler(object sender, T e) where T : EventArgs;
+
+ ///
+ /// Returns true when deserialization succeeds.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static bool TryDeserialize(string json, JsonSerializerOptions options, out T result)
+ {
+ try
+ {
+ result = JsonSerializer.Deserialize(json, options);
+ return result != null;
+ }
+ catch (Exception)
+ {
+ result = default;
+ return false;
+ }
+ }
+
+ ///
+ /// Returns true when deserialization succeeds.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static bool TryDeserialize(ref Utf8JsonReader reader, JsonSerializerOptions options, out T result)
+ {
+ try
+ {
+ result = JsonSerializer.Deserialize(ref reader, options);
+ return result != null;
+ }
+ catch (Exception)
+ {
+ result = default;
+ return false;
+ }
+ }
+
+ ///
+ /// Sanitize filename by removing the path
+ ///
+ /// Filename
+ /// Filename
+ public static string SanitizeFilename(string filename)
+ {
+ Match match = Regex.Match(filename, @".*[/\\](.*)$");
+ return match.Success ? match.Groups[1].Value : filename;
+ }
+
+ ///
+ /// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime.
+ /// If parameter is a list, join the list with ",".
+ /// Otherwise just return the string.
+ ///
+ /// The parameter (header, path, query, form).
+ /// The DateTime serialization format.
+ /// Formatted string.
+ public static string ParameterToString(object obj, string format = ISO8601_DATETIME_FORMAT)
+ {
+ if (obj is DateTime dateTime)
+ // Return a formatted date string - Can be customized with Configuration.DateTimeFormat
+ // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o")
+ // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
+ // For example: 2009-06-15T13:45:30.0000000
+ return dateTime.ToString(format);
+ if (obj is DateTimeOffset dateTimeOffset)
+ // Return a formatted date string - Can be customized with Configuration.DateTimeFormat
+ // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o")
+ // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
+ // For example: 2009-06-15T13:45:30.0000000
+ return dateTimeOffset.ToString(format);
+ if (obj is bool boolean)
+ return boolean
+ ? "true"
+ : "false";
+ if (obj is ICollection collection)
+ {
+ List entries = new List();
+ foreach (var entry in collection)
+ entries.Add(ParameterToString(entry));
+ return string.Join(",", entries);
+ }
+
+ return Convert.ToString(obj, System.Globalization.CultureInfo.InvariantCulture);
+ }
+
+ ///
+ /// URL encode a string
+ /// Credit/Ref: https://github.com/restsharp/RestSharp/blob/master/RestSharp/Extensions/StringExtensions.cs#L50
+ ///
+ /// string to be URL encoded
+ /// Byte array
+ public static string UrlEncode(string input)
+ {
+ const int maxLength = 32766;
+
+ if (input == null)
+ {
+ throw new ArgumentNullException("input");
+ }
+
+ if (input.Length <= maxLength)
+ {
+ return Uri.EscapeDataString(input);
+ }
+
+ StringBuilder sb = new StringBuilder(input.Length * 2);
+ int index = 0;
+
+ while (index < input.Length)
+ {
+ int length = Math.Min(input.Length - index, maxLength);
+ string subString = input.Substring(index, length);
+
+ sb.Append(Uri.EscapeDataString(subString));
+ index += subString.Length;
+ }
+
+ return sb.ToString();
+ }
+
+ ///
+ /// Encode string in base64 format.
+ ///
+ /// string to be encoded.
+ /// Encoded string.
+ public static string Base64Encode(string text)
+ {
+ return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(text));
+ }
+
+ ///
+ /// Convert stream to byte array
+ ///
+ /// Input stream to be converted
+ /// Byte array
+ public static byte[] ReadAsBytes(Stream inputStream)
+ {
+ using (var ms = new MemoryStream())
+ {
+ inputStream.CopyTo(ms);
+ return ms.ToArray();
+ }
+ }
+
+ ///
+ /// Select the Content-Type header's value from the given content-type array:
+ /// 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.
+ /// The Content-Type header to use.
+ public static string SelectHeaderContentType(string[] contentTypes)
+ {
+ if (contentTypes.Length == 0)
+ return null;
+
+ foreach (var contentType in contentTypes)
+ {
+ if (IsJsonMime(contentType))
+ return contentType;
+ }
+
+ return contentTypes[0]; // use the first content type specified in 'consumes'
+ }
+
+ ///
+ /// Select the Accept header's value from the given accepts array:
+ /// if JSON exists in the given array, use it;
+ /// otherwise use all of them (joining into a string)
+ ///
+ /// The accepts array to select from.
+ /// The Accept header to use.
+ public static string SelectHeaderAccept(string[] accepts)
+ {
+ if (accepts.Length == 0)
+ return null;
+
+ if (accepts.Contains("application/json", StringComparer.OrdinalIgnoreCase))
+ return "application/json";
+
+ return string.Join(",", accepts);
+ }
+
+ ///
+ /// Provides a case-insensitive check that a provided content type is a known JSON-like content type.
+ ///
+ public static readonly Regex JsonRegex = new Regex("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");
+
+ ///
+ /// 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 static bool IsJsonMime(string mime)
+ {
+ if (string.IsNullOrWhiteSpace(mime)) return false;
+
+ return JsonRegex.IsMatch(mime) || mime.Equals("application/json-patch+json");
+ }
+
+ ///
+ /// Get the discriminator
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static string GetDiscriminator(Utf8JsonReader utf8JsonReader, string discriminator)
+ {
+ int currentDepth = utf8JsonReader.CurrentDepth;
+
+ if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray)
+ throw new JsonException();
+
+ JsonTokenType startingTokenType = utf8JsonReader.TokenType;
+
+ while (utf8JsonReader.Read())
+ {
+ if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth)
+ break;
+
+ if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth)
+ break;
+
+ if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1)
+ {
+ string localVarJsonPropertyName = utf8JsonReader.GetString();
+ utf8JsonReader.Read();
+
+ if (localVarJsonPropertyName != null && localVarJsonPropertyName.Equals(discriminator))
+ return utf8JsonReader.GetString();
+ }
+ }
+
+ throw new JsonException("The specified discriminator was not found.");
+ }
+
+ ///
+ /// The base path of the API
+ ///
+ public const string BASE_ADDRESS = "http://localhost";
+
+ ///
+ /// The scheme of the API
+ ///
+ public const string SCHEME = "http";
+
+ ///
+ /// The context path of the API
+ ///
+ public const string CONTEXT_PATH = "";
+
+ ///
+ /// The host of the API
+ ///
+ public const string HOST = "localhost";
+
+ ///
+ /// The format to use for DateTime serialization
+ ///
+ public const string ISO8601_DATETIME_FORMAT = "o";
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/CookieContainer.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/CookieContainer.cs
new file mode 100644
index 00000000000..da94287dab8
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/CookieContainer.cs
@@ -0,0 +1,18 @@
+//
+
+using System.Linq;
+using System.Collections.Generic;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// A class containing a CookieContainer
+ ///
+ public sealed class CookieContainer
+ {
+ ///
+ /// The collection of tokens
+ ///
+ public System.Net.CookieContainer Value { get; } = new System.Net.CookieContainer();
+ }
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/DateTimeJsonConverter.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/DateTimeJsonConverter.cs
new file mode 100644
index 00000000000..68e90f4ecbb
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/DateTimeJsonConverter.cs
@@ -0,0 +1,77 @@
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Globalization;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Formatter for 'date' and 'date-time' openapi formats ss defined by full-date - RFC3339
+ /// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types
+ ///
+ public class DateTimeJsonConverter : JsonConverter
+ {
+ ///
+ /// The formats used to deserialize the date
+ ///
+ public static string[] Formats { get; } = {
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ssK",
+ "yyyy'-'MM'-'dd",
+ "yyyyMMddTHHmmss.fffffffK",
+ "yyyyMMddTHHmmss.ffffffK",
+ "yyyyMMddTHHmmss.fffffK",
+ "yyyyMMddTHHmmss.ffffK",
+ "yyyyMMddTHHmmss.fffK",
+ "yyyyMMddTHHmmss.ffK",
+ "yyyyMMddTHHmmss.fK",
+ "yyyyMMddTHHmmssK",
+ "yyyyMMdd"
+
+ };
+
+ ///
+ /// Returns a DateTime from the Json object
+ ///
+ ///
+ ///
+ ///
+ ///
+ public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
+ if (reader.TokenType == JsonTokenType.Null)
+ throw new NotSupportedException();
+
+ string value = reader.GetString();
+
+ foreach(string format in Formats)
+ if (DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out DateTime result))
+ return result;
+
+ throw new NotSupportedException();
+ }
+
+ ///
+ /// Writes the DateTime to the json writer
+ ///
+ ///
+ ///
+ ///
+ public override void Write(Utf8JsonWriter writer, DateTime dateTimeValue, JsonSerializerOptions options) =>
+ writer.WriteStringValue(dateTimeValue.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK", CultureInfo.InvariantCulture));
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/DateTimeNullableJsonConverter.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/DateTimeNullableJsonConverter.cs
new file mode 100644
index 00000000000..3cb4b6ce51e
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/DateTimeNullableJsonConverter.cs
@@ -0,0 +1,82 @@
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Globalization;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Formatter for 'date' and 'date-time' openapi formats ss defined by full-date - RFC3339
+ /// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types
+ ///
+ public class DateTimeNullableJsonConverter : JsonConverter
+ {
+ ///
+ /// The formats used to deserialize the date
+ ///
+ public static string[] Formats { get; } = {
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fK",
+ "yyyy'-'MM'-'dd'T'HH':'mm':'ssK",
+ "yyyy'-'MM'-'dd",
+ "yyyyMMddTHHmmss.fffffffK",
+ "yyyyMMddTHHmmss.ffffffK",
+ "yyyyMMddTHHmmss.fffffK",
+ "yyyyMMddTHHmmss.ffffK",
+ "yyyyMMddTHHmmss.fffK",
+ "yyyyMMddTHHmmss.ffK",
+ "yyyyMMddTHHmmss.fK",
+ "yyyyMMddTHHmmssK",
+ "yyyyMMdd"
+
+ };
+
+ ///
+ /// Returns a DateTime from the Json object
+ ///
+ ///
+ ///
+ ///
+ ///
+ public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
+ if (reader.TokenType == JsonTokenType.Null)
+ return null;
+
+ string value = reader.GetString();
+
+ foreach(string format in Formats)
+ if (DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out DateTime result))
+ return result;
+
+ return null;
+ }
+
+ ///
+ /// Writes the DateTime to the json writer
+ ///
+ ///
+ ///
+ ///
+ public override void Write(Utf8JsonWriter writer, DateTime? dateTimeValue, JsonSerializerOptions options)
+ {
+ if (dateTimeValue == null)
+ writer.WriteNullValue();
+ else
+ writer.WriteStringValue(dateTimeValue.Value.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK", CultureInfo.InvariantCulture));
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ExceptionEventArgs.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ExceptionEventArgs.cs
new file mode 100644
index 00000000000..dcfab667823
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/ExceptionEventArgs.cs
@@ -0,0 +1,24 @@
+using System;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Useful for tracking server health
+ ///
+ public class ExceptionEventArgs : EventArgs
+ {
+ ///
+ /// The ApiResponse
+ ///
+ public Exception Exception { get; }
+
+ ///
+ /// The ExcepetionEventArgs
+ ///
+ ///
+ public ExceptionEventArgs(Exception exception)
+ {
+ Exception = exception;
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/HostConfiguration.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/HostConfiguration.cs
new file mode 100644
index 00000000000..a90199eebd6
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/HostConfiguration.cs
@@ -0,0 +1,131 @@
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using System.Net.Http;
+using Microsoft.Extensions.DependencyInjection;
+using Org.OpenAPITools.Api;
+using Org.OpenAPITools.Model;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Provides hosting configuration for Org.OpenAPITools
+ ///
+ public class HostConfiguration
+ {
+ private readonly IServiceCollection _services;
+ private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions();
+
+ internal bool HttpClientsAdded { get; private set; }
+
+ ///
+ /// Instantiates the class
+ ///
+ ///
+ public HostConfiguration(IServiceCollection services)
+ {
+ _services = services;
+ _jsonOptions.Converters.Add(new JsonStringEnumConverter());
+ _jsonOptions.Converters.Add(new DateTimeJsonConverter());
+ _jsonOptions.Converters.Add(new DateTimeNullableJsonConverter());
+ _jsonOptions.Converters.Add(new AppleJsonConverter());
+ _jsonOptions.Converters.Add(new BananaJsonConverter());
+ _jsonOptions.Converters.Add(new FruitJsonConverter());
+ JsonSerializerOptionsProvider jsonSerializerOptionsProvider = new JsonSerializerOptionsProvider(_jsonOptions);
+ _services.AddSingleton(jsonSerializerOptionsProvider);
+ _services.AddSingleton();
+ _services.AddSingleton();
+ _services.AddTransient();
+ }
+
+ ///
+ /// Configures the HttpClients.
+ ///
+ ///
+ ///
+ ///
+ public HostConfiguration AddApiHttpClients
+ (
+ Action client = null, Action builder = null)
+ {
+ if (client == null)
+ client = c => c.BaseAddress = new Uri(ClientUtils.BASE_ADDRESS);
+
+ List builders = new List();
+
+ builders.Add(_services.AddHttpClient(client));
+
+ if (builder != null)
+ foreach (IHttpClientBuilder instance in builders)
+ builder(instance);
+
+ HttpClientsAdded = true;
+
+ return this;
+ }
+
+ ///
+ /// Configures the JsonSerializerSettings
+ ///
+ ///
+ ///
+ public HostConfiguration ConfigureJsonOptions(Action options)
+ {
+ options(_jsonOptions);
+
+ return this;
+ }
+
+ ///
+ /// Adds tokens to your IServiceCollection
+ ///
+ ///
+ ///
+ ///
+ public HostConfiguration AddTokens(TTokenBase token) where TTokenBase : TokenBase
+ {
+ return AddTokens(new TTokenBase[]{ token });
+ }
+
+ ///
+ /// Adds tokens to your IServiceCollection
+ ///
+ ///
+ ///
+ ///
+ public HostConfiguration AddTokens(IEnumerable tokens) where TTokenBase : TokenBase
+ {
+ TokenContainer container = new TokenContainer(tokens);
+ _services.AddSingleton(services => container);
+
+ return this;
+ }
+
+ ///
+ /// Adds a token provider to your IServiceCollection
+ ///
+ ///
+ ///
+ ///
+ public HostConfiguration UseProvider()
+ where TTokenProvider : TokenProvider
+ where TTokenBase : TokenBase
+ {
+ _services.AddSingleton();
+ _services.AddSingleton>(services => services.GetRequiredService());
+
+ return this;
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/JsonSerializerOptionsProvider.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/JsonSerializerOptionsProvider.cs
new file mode 100644
index 00000000000..8fd6b68578f
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/JsonSerializerOptionsProvider.cs
@@ -0,0 +1,25 @@
+//
+
+using System.Text.Json;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Provides the JsonSerializerOptions
+ ///
+ public class JsonSerializerOptionsProvider
+ {
+ ///
+ /// the JsonSerializerOptions
+ ///
+ public JsonSerializerOptions Options { get; }
+
+ ///
+ /// Instantiates a JsonSerializerOptionsProvider
+ ///
+ public JsonSerializerOptionsProvider(JsonSerializerOptions options)
+ {
+ Options = options;
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/Option.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/Option.cs
new file mode 100644
index 00000000000..55d56f3f204
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/Option.cs
@@ -0,0 +1,51 @@
+//
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// A wrapper for operation parameters which are not required
+ ///
+ public struct Option
+ {
+ ///
+ /// The value to send to the server
+ ///
+ public TType Value { get; }
+
+ ///
+ /// When true the value will be sent to the server
+ ///
+ internal bool IsSet { get; }
+
+ ///
+ /// A wrapper for operation parameters which are not required
+ ///
+ ///
+ public Option(TType value)
+ {
+ IsSet = true;
+ Value = value;
+ }
+
+ ///
+ /// Implicitly converts this option to the contained type
+ ///
+ ///
+ public static implicit operator TType(Option option) => option.Value;
+
+ ///
+ /// Implicitly converts the provided value to an Option
+ ///
+ ///
+ public static implicit operator Option(TType value) => new Option(value);
+ }
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/RateLimitProvider`1.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/RateLimitProvider`1.cs
new file mode 100644
index 00000000000..8e7bed46e9c
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/RateLimitProvider`1.cs
@@ -0,0 +1,55 @@
+//
+/*
+ * fruity
+ *
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+ *
+ * The version of the OpenAPI document: 0.0.1
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Channels;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// Provides a token to the api clients. Tokens will be rate limited based on the provided TimeSpan.
+ ///
+ ///
+ public class RateLimitProvider : TokenProvider where TTokenBase : TokenBase
+ {
+ internal Dictionary> AvailableTokens { get; } = new Dictionary>();
+
+ ///
+ /// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
+ ///
+ ///
+ public RateLimitProvider(TokenContainer container) : base(container.Tokens)
+ {
+ foreach(TTokenBase token in _tokens)
+ token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
+
+ BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
+ {
+ FullMode = BoundedChannelFullMode.DropWrite
+ };
+
+ AvailableTokens.Add(string.Empty, Channel.CreateBounded(options));
+
+ foreach(Channel tokens in AvailableTokens.Values)
+ for (int i = 0; i < _tokens.Length; i++)
+ _tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
+ }
+
+ internal override async System.Threading.Tasks.ValueTask GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
+ {
+ if (!AvailableTokens.TryGetValue(header, out Channel tokens))
+ throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
+
+ return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
+ }
+ }
+}
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/TokenBase.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/TokenBase.cs
new file mode 100644
index 00000000000..ec843104caf
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/TokenBase.cs
@@ -0,0 +1,69 @@
+//
+
+using System;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// The base for all tokens.
+ ///
+ public abstract class TokenBase
+ {
+ private DateTime _nextAvailable = DateTime.UtcNow;
+ private object _nextAvailableLock = new object();
+ private readonly System.Timers.Timer _timer = new System.Timers.Timer();
+
+
+ internal TimeSpan? Timeout { get; set; }
+ internal delegate void TokenBecameAvailableEventHandler(object sender);
+ internal event TokenBecameAvailableEventHandler TokenBecameAvailable;
+
+
+ ///
+ /// Initialize a TokenBase object.
+ ///
+ ///
+ internal TokenBase(TimeSpan? timeout = null)
+ {
+ Timeout = timeout;
+
+ if (Timeout != null)
+ StartTimer(Timeout.Value);
+ }
+
+
+ ///
+ /// Starts the token's timer
+ ///
+ ///
+ internal void StartTimer(TimeSpan timeout)
+ {
+ Timeout = timeout;
+ _timer.Interval = Timeout.Value.TotalMilliseconds;
+ _timer.Elapsed += OnTimer;
+ _timer.AutoReset = true;
+ _timer.Start();
+ }
+
+ ///
+ /// Returns true while the token is rate limited.
+ ///
+ public bool IsRateLimited => _nextAvailable > DateTime.UtcNow;
+
+ ///
+ /// Triggered when the server returns status code TooManyRequests
+ /// Once triggered the local timeout will be extended an arbitrary length of time.
+ ///
+ public void BeginRateLimit()
+ {
+ lock(_nextAvailableLock)
+ _nextAvailable = DateTime.UtcNow.AddSeconds(5);
+ }
+
+ private void OnTimer(object sender, System.Timers.ElapsedEventArgs e)
+ {
+ if (TokenBecameAvailable != null && !IsRateLimited)
+ TokenBecameAvailable.Invoke(this);
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/TokenContainer`1.cs b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/TokenContainer`1.cs
new file mode 100644
index 00000000000..ab372352e21
--- /dev/null
+++ b/samples/client/petstore/csharp/generichost/net4.8/AnyOf/src/Org.OpenAPITools/Client/TokenContainer`1.cs
@@ -0,0 +1,35 @@
+//
+
+using System.Linq;
+using System.Collections.Generic;
+
+namespace Org.OpenAPITools.Client
+{
+ ///
+ /// A container for a collection of tokens.
+ ///
+ ///
+ public sealed class TokenContainer where TTokenBase : TokenBase
+ {
+ ///