Как проверить, является ли значение datetime пустым или нет в запросе пут - PullRequest
0 голосов
/ 28 декабря 2018

в моем контроллере я пытаюсь проверить, передается ли значение datetime в запросе пут, но когда я не отправляю значение для этого поля datetime, оно сбрасывает значение в базе данных на 01/01 /0001 / вот код в моем контроллере, как я проверяю, пусто оно или нет. (Немного) (Проверьте user.Age!)

[HttpPut("User/Edit/{userid}")]
    public IActionResult Update(string token, int userid, [FromBody]User user)
    {


        bool RoleId = JWTValidator.RoleIDTokenValidation(token);
        var edit = _context.users.Find(userid);
        if (RoleId)
        {
            if (user.Name != null)
            {
                edit.Name = user.Name;
            }
            else
            {
                edit.Name = edit.Name;
            }
            if (user.LastName != null)
            {
                edit.LastName = user.LastName;
            }
            else
            {
                edit.LastName = edit.LastName;
            }
            if (user.Age != null)
            {
                edit.Age = user.Age;
            }
            else
            {
                edit.Age = edit.Age;
            }

, поэтому, если значение равно нулю, оно выиграет 'я не могу ничего обновить, но я думаю, что если вы ничего не введете, он увидит это как 01/01/0001, поэтому я попытался сравнить его следующим образом

if(user.Age == "01/01/0001")

, но я не могу сравнить тип datetime со строкой,а также я использую валидацию, подобную этой

if (ModelState.IsValid)
                {
                    _context.users.Update(edit);
                    _context.SaveChanges();
                }
                else
                {
                    return BadRequest(ModelState);
                }

, и моя модель для Age

[Display(Name = "Your Birthday")]
    [DataType(DataType.Date, ErrorMessage = "Not a correct date format, MM/DD/YYYY please.")]
    public DateTime Age { get; set; }

, но если я отправлю запрос на поставку с содержанием "Age": "test" itпросто дает мне внутреннюю ошибку 500 вместо сообщения об ошибке, я справляюсь с этим неправильно?

Надеюсь, кто-нибудь может мне помочь.

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Похоже, проблема в том, что вам нужно сравнить struct со значением по умолчанию, которое не равно null.Чтобы сделать это, вы можете просто использовать ключевое слово default, чтобы получить значение по умолчанию для типа.Обратите внимание, что вы можете сделать это как с классами, так и со структурами:

if (user.Age != default(DateTime))
{
    edit.Age = user.Age;
}
0 голосов
/ 29 декабря 2018

Вы также можете объявить age как nullable, то есть:

DateTime? user.Age  = new DateTime();

Вы можете легко проверить на null и просто установить edit.Age вот так (если вы хотите значение по умолчанию):

edit.Age = user.Age ?? new DateTime(1970,01,01);

С уважением.

0 голосов
/ 28 декабря 2018

Хорошо, если вы ищете что-то, чтобы заменить это, если (user.Age == "01/01/0001")

Здесь у вас есть простой пример: Возвращает 0, если совпадает с датой

DateTime dt = DateTime.ParseExact("01/01/0001 00:00:00", "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); //Use your default date string and your format type
DateTime dt2 = DateTime.Now;//Use Your Specific Date
var dtComp = DateTime.Compare(dt, dt2);
...