Теперь у меня есть пользовательский объект, который имеет три обязательных атрибута: {FirstName, LastName, CreatedTime}.
Теперь я разработал API для создания пользователя. Я хочу использовать POST/api/users.
Я должен передать данные Джейсона, и он содержит данные, которые я хочу опубликовать.
Если я перехожу в {FirstName = abc, LastName = abc, CreatedTime = sometime}, он работает, но если я пропущу какой-либо атрибут, например, только проходящий в {firstname = abc}, он будет генерировать исключение.
Я вставил свой метод ниже.
[Route("api/users")]
public User CreateUser(User user)
{
if (!ModelState.IsValid)
throw new HttpResponseException(HttpStatusCode.BadRequest);
user.FirstName = String.IsNullOrEmpty(user.FirstName) ? "Undefined" : user.FirstName;
user.LastName = String.IsNullOrEmpty(user.LastName) ? "Undefined" : user.LastName;
user.UserName = String.IsNullOrEmpty(user.UserName) ? "Undefined" : user.UserName;
user.ModifiedAt = DateTime.Now;
user.CreatedAt = DateTime.Now;
_context.Users.Add(user);
_context.SaveChanges();
return user;
}
Мой вопрос: есть ли способ, которым я могу передать частичные свойства пользователя? Такие, как {firstname = abc}.
Этот метод также может использоваться как PUT (метод обновления пользователя).
Заранее спасибо.
1) При вставке вашей записи просто пометьте CreatedAt
и ModifiedAt
[JsonIgnore]
[Required]
[JsonIgnore]
public DateTime CreatedAt { get; set; }
[Required]
[JsonIgnore]
public DateTime ModifiedAt { get; set; }
2) Когда вы пытаетесь получить свои данные, ваш метод api будет
[HttpGet]
[Route("ById/{id=id}")]
public IHttpActionResult GetUser(int? id)
{
if (id == null)
return NotFound();
User user = _context.Users.SingleOrDefault(c => c.UserId == id.Value);
if (user == null)
return BadRequest("User not exist in our database");
var returnedData = new { FirstName = user.FirstName, LastName = user.LastName, UserName = user.UserName, CreatedAt = DateTime.Now, ModifiedAt = DateTime.Now };
return Ok(returnedData);
}
Мы просто используем, чтобы возвращать Anonymous Type
который настраивается для возврата данных.
Попробуйте, если это поможет вам
Это зависит от типа данных свойств, если они имеют значение NULL, поэтому вы можете просто оставить их пустыми или пустыми в отправляющем сообщении, но если они не являются нулевыми, вы должны указать значение, иначе вы получите уведомление в месте назначения (ваше действие wep-api), Итак, если вы хотите избежать передачи значения даже для свойств, [JsonIgnore]
вы можете использовать [JsonIgnore]
(принадлежит Newtonsoft.Json
) для ваших свойств. Как это:
using Newtonsoft.Json;
public class User
{
//...
[JsonIgnore]
public DateTime CreatedAt { get; set; }
//...
}
User
для любого другого API, где требуются все свойства?