在具有相同名稱的不同名稱空間中招搖不同的類不起作用
我有(超過)兩個 Api POST 端點。每個都需要一個json作為參數。但是當我在兩個端點參數類中使用相同的類名 Payload時, Swagger 不起作用。當我將其中一個從Payload更改為Payload1時,它就可以工作了。當然,我在包裝類中設置了正確的命名空間,以便它找到 Payload。但我希望每次都使用相同的名稱“Payload”。如何使用相同的類名Payload? 我可以在這兩種情況下保留 json 名稱“Payload”,並為屬性設置不同的名稱(“Payload1”、“Payload2”)。有用。但是也有相同的屬性名稱會很好。,
端點 A
$$ HttpPost() $$ 公共非同步任務 PostPerson(
$$ FromBody $$JsonWrapperA jsonWrapperA)
namespace myProject.A { public class JsonWrapperA { [JsonProperty("name", Required = Required.AllowNull)] public string Name { get; set; } [JsonProperty("payload", Required = Required.AllowNull)] public Payload Payload { get; set; } } public class Payload { [JsonProperty("value", Required = Required.AllowNull)] public double Value { get; set; } } }端點 B
$$ HttpPost() $$ 公共非同步任務 PostCompagn(
$$ FromBody $$JsonWrapperB jsonWrapperB)
namespace myProject.B { public class JsonWrapperB { [JsonProperty("compagny", Required = Required.AllowNull)] public string Compagny { get; set; } [JsonProperty("payload", Required = Required.AllowNull)] public Payload Payload { get; set; } } public class Payload { [JsonProperty("age", Required = Required.AllowNull)] public double Age{ get; set; } } }
預設情況下,swagger 將嘗試為作為 API 端點的返回類型或參數類型的對象建構其模式 ID,並將在文件的“模型”部分顯示這些對象。它將基於對象的類名建構這些模式 ID。
當您嘗試將兩個或多個類命名為相同時,即使它們位於不同的命名空間中,您也會收到衝突的 schemaIds 錯誤:
InvalidOperationException:衝突的 schemaIds:為 NamespaceOne.MyClass 和 NamespaceTwo.MyClass 類型檢測到相同的 schemaIds。有關解決方法,請參閱配置設置 - “CustomSchemaIds”
這意味著需要配置 Swagger 以更改其生成其 SchemaId 的方式。您可以簡單地告訴 swagger 使用對象完全限定名稱,該名稱將在 schemaIds 中包含命名空間。您可以通過以下方法在
Startup.cs文件中執行ConfigureServices此操作://add using statement for Swagger in Startup.cs using Swashbuckle.AspNetCore.Swagger; ... public void ConfigureServices(IServiceCollection services) { services.AddSwaggerGen(config => { //some swagger configuration code. //use fully qualified object names config.CustomSchemaIds(x => x.FullName); } }
