Сериализация DTO на основе аутентификации

1

Мои контроллеры Web API должны возвращать разные модели, основываясь на том, принадлежит ли ему модель, которую пользователь пытается получить.

Так, например:

class Customer {
    public string Id { get; set; }

    public int UserId { get; set; }

    public string Name { get; set; }

    public decimal Revenue { get; set; }
}

Соответствующим действием будет Api/Customers/1.

Теперь, если эта модель принадлежит пользователю, который в настоящее время вызывает действие, я хотел бы вернуть все поля. Если, однако, кто-то другой вызывает одно и то же действие, он должен видеть только поля Id и Name.

Я знаю, что вы можете вернуть интерфейс и выбрать реализацию на основе уровня аутентификации, но мне было интересно, было ли что-то более простое, например [JsonIgnore] но на основе уровня доступа для достижения того же? Это также поможет мне уменьшить дублирование кода.

Какой самый элегантный способ достичь того, что я пытаюсь сделать?

Теги:
asp.net-web-api
asp.net-web-api2

1 ответ

1
Лучший ответ

Я думаю, вы можете использовать условную сериализацию JSON.NET (если вы используете JSON.NET). Эта ссылка может помочь вам больше

To conditionally serialize a property add a boolean method with the same name as 
the property and then prefixed the method name with ShouldSerialize. 
The result of the method determines whether the property is serialized. 
If the method returns true then the property will be serialized, if it returns false
and the property will be skipped.

Другая вещь, о которой я могу думать, - переопределить метод Object.ToString() в вашем классе, который вернет JSON в соответствии с вашими потребностями. Вы все равно должны указать условие, и при условии вернуть строку JSON по вашему выбору.

  • 0
    Большой! Я не знал об условной сериализации, это именно то, что мне было нужно. Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню