Как передать в части объекта (JSON) по успокоительный API - PullRequest
0 голосов
/ 07 сентября 2018

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

Мой вопрос: есть ли способ, которым я могу передать частичные свойства пользователя? Такие как {имя = abc}.

Этот метод также можно использовать как PUT (метод обновления пользователя).

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

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

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 голосов
/ 07 сентября 2018

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

using Newtonsoft.Json;

public class User
{
   //...
   [JsonIgnore]
   public DateTime CreatedAt  { get; set; }
   //...
}
...