Я немного запутался в структуре сущностей OData.Давайте рассмотрим пример пользовательской сущности:
public class User {
[Required]
public string Name;
[Required]
public string Surname;
[Required]
public string Password;
}
И затем мы добавим его в модель EDM:
var type = builder.AddEntityType(typeof(User));
builder.AddEntitySet("Users", type);
Достаточно справедливо, но ... Конечно, мы не хотим показыватьPassword
.К счастью, существует множество способов исключить password
из воздействия.Один из них - просто установить его на null
по возвращении, что, на мой взгляд, неверно, поскольку поле помечено как Required
, а возвращение null
просто кажется неправильным.
Более распространенным является игнорированиеэто в модели EDM.Но есть проблема с этим решением, а именно метод POST
больше не будет получать все данные, необходимые для создания User
.
public ActionResult<User> Post([FromBody] User user)
{
// user missing password
Как пользователь должен войти в систему без указания пароля?Я чувствую, что исключение пароля из модели EDM также не является правильным способом сделать это.
Идеальным решением было бы использование двух DTO's
, которые бы разделяли UserInitiator
структуру данных (которая включала бы свойство пароля, ноне имеют некоторых других свойств, таких как id
) и UserInfo
, которые будут содержать все данные, «безопасные для чтения».К сожалению, OData не позволяет такое разделение.
Итак, как мне правильно обрабатывать свойство password
?