Как передать в части объекта (JSON) по успокоительный API

2

Теперь у меня есть пользовательский объект, который имеет три обязательных атрибута: {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 (метод обновления пользователя).

Заранее спасибо.

  • 0
    Используется ли ваш объект User для любого другого API, где требуются все свойства?
  • 0
    @Dishant Нет, это единственный API, который у меня есть в этом проекте.
Показать ещё 3 комментария
Теги:
restful-url

2 ответа

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

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 который настраивается для возврата данных.

Попробуйте, если это поможет вам

0

Это зависит от типа данных свойств, если они имеют значение NULL, поэтому вы можете просто оставить их пустыми или пустыми в отправляющем сообщении, но если они не являются нулевыми, вы должны указать значение, иначе вы получите уведомление в месте назначения (ваше действие wep-api), Итак, если вы хотите избежать передачи значения даже для свойств, [JsonIgnore] вы можете использовать [JsonIgnore] (принадлежит Newtonsoft.Json) для ваших свойств. Как это:

using Newtonsoft.Json;

public class User
{
   //...
   [JsonIgnore]
   public DateTime CreatedAt  { get; set; }
   //...
}
  • 1
    Это работает! Но есть ли способ получить данные из API? Например, если я вызову / api / users / 1 и он вернет все свойства, которые есть у этого пользователя, включая игнорируемые json.
  • 0
    Вы можете изменить тип параметра с «Пользователь-пользователь» на «объект-пользователь», тогда у вас будет полный объект JSON в качестве входных аргументов, а затем вы можете сериализовать его вручную

Ещё вопросы

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