Использование JsonIgnore невозможно в моем проекте, и [OpenApiIgnore] не работает. В swashbuckle было возможно сделать фильтр по его собственному атрибуту, но в NSwag я не нашел подобного механизма.
Пример кода:
Класс команд на шлюзе API:
[MessageNamespace("identity")]
public class UpdateUser:ICommand
{
[JsonConstructor]
public UpdateUser(string surname, string name, string middleName, string department, string position, string adAccount, string email, string userName, string password)
{
Surname = surname;
Name = name;
MiddleName = middleName;
Department = department;
Position = position;
AdAccount = adAccount;
Email = email;
UserName = userName;
}
[JsonIgnore]
public Guid Id { get; }
...
}
Класс команд на микросервисе:
public class UpdateUser:ICommand
{
[JsonConstructor]
public UpdateUser(Guid id, string surname, string name, string middleName, string department, string position, string adAccount, string email, string userName, string password)
{
Id = id;
Surname = surname;
Name = name;
MiddleName = middleName;
Department = department;
Position = position;
AdAccount = adAccount;
Email = email;
UserName = userName;
}
public Guid Id { get; }
...
}
Метод API на шлюзе:
[HttpPut("{id}")]
[JwtAuth(Roles.Administrator)]
public async Task<ActionResult> Put(Guid id, UpdateUser command)
{
//Send command to RabbitMQ(serialized)
//Id binded before sending but after construct in service ID is missing
await SendAsync(command.Bind(c => c.Id, id));
return Accepted();
}
Почему мне нужно удалить свойство из генерации NSwag? Потому что мне нужен Id в маршруте, но если Id также находится в теле запроса, это делает мой интерфейсный кодер агрессивным и разрушительным, а также не красивым: