#asp.net-core #.net-core #swagger #swagger-codegen #nswag
#asp.net-core #.net-core #развязность #swagger-codegen #nswag
Вопрос:
Я использую NSwag для своего ASP.NET Основной проект веб-api и просто не могу заставить его работать. Что я пытаюсь сделать, так это исключить некоторые базовые свойства IdentityUser . Вот мой пользовательский пользовательский класс:
[DataContract]
[JsonSchemaFlattenAttribute]
public class User : IdentityUser
{
// Overridden variables
[DataMember( Name = "id" )]
[PersonalData]
public new string Id { get; set; }
[DataMember( Name = "email" )]
[ProtectedPersonalData]
public new string Email { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new DateTimeOffset? LockoutEnd { get; set; }
[PersonalData]
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new bool TwoFactorEnabled { get; set; }
[PersonalData]
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new bool PhoneNumberConfirmed { get; set; }
[ProtectedPersonalData]
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string PhoneNumber { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string ConcurrencyStamp { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string SecurityStamp { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string PasswordHash { get; set; }
[PersonalData]
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new bool EmailConfirmed { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string NormalizedEmail { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string NormalizedUserName { get; set; }
[ProtectedPersonalData]
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new string UserName { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new bool LockoutEnabled { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public new int AccessFailedCount { get; set; }
// Custom variables
[DataMember( Name = "date_joined_utc" )]
public DateTime DateJoinedUtc { get; set; }
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public virtual ICollection<RefreshToken> RefreshTokens { get; set; }
// Optimistic concurrency
[Timestamp]
[IgnoreDataMember]
[JsonSchemaIgnoreAttribute]
public byte[] RowVersion { get; set; }
}
Который генерирует:
"User": {
"type": "object",
"required": [
"dateJoinedUtc"
],
"properties": {
"id": {
"type": "string"
},
"email": {
"type": "string"
},
"dateJoinedUtc": {
"type": "string",
"format": "date-time"
}
},
"allOf": [
{
"$ref": "#/definitions/IdentityUserOfString"
},
{}
]
},
"IdentityUserOfString": {
"type": "object",
"required": [
"emailConfirmed",
"phoneNumberConfirmed",
"twoFactorEnabled",
"lockoutEnabled",
"accessFailedCount"
],
"properties": {
"id": {
"type": "string"
},
"userName": {
"type": "string"
},
"normalizedUserName": {
"type": "string"
},
"email": {
"type": "string"
},
"normalizedEmail": {
"type": "string"
},
"emailConfirmed": {
"type": "boolean"
},
"passwordHash": {
"type": "string"
},
"securityStamp": {
"type": "string"
},
"concurrencyStamp": {
"type": "string"
},
"phoneNumber": {
"type": "string"
},
"phoneNumberConfirmed": {
"type": "boolean"
},
"twoFactorEnabled": {
"type": "boolean"
},
"lockoutEnd": {
"type": "string",
"format": "date-time"
},
"lockoutEnabled": {
"type": "boolean"
},
"accessFailedCount": {
"type": "integer",
"format": "int32"
}
}
},
Мое понимание JsonSchemaFlattenAttribute заключается в том, что он должен исключать базовые классы и помещать каждое свойство в производный класс. Итак, почему генерируется класс IdentityUserOfString? Чего мне не хватает?
Комментарии:
1. Вот исходный код JsonSchemaFlattenAttribute . В ссылке
SeppPenner
сказано, что это то, что он искал. Возможно, атрибут JsonSchemaFlattenAttribute может работать только для пользовательского базового класса.
Ответ №1:
По какой-то причине установка OpenApiIgnore для пользовательского класса решила эту проблему:
[DataContract]
//[JsonSchemaFlattenAttribute]
[OpenApiIgnore]
public class User : IdentityUser
Генерирует:
"User": {
"type": "object",
"required": [
"dateJoinedUtc"
],
"properties": {
"id": {
"type": "string"
},
"email": {
"type": "string"
},
"dateJoinedUtc": {
"type": "string",
"format": "date-time"
}
}
},