BindRequired в DateTime - PullRequest
       1

BindRequired в DateTime

0 голосов
/ 30 мая 2019

У меня проблема с атрибутом [BindRequired], он не отменяет состояние моей модели:

public class PostModel
{
    [BindRequired]
    public DateTime Date { get; set; }
}

Контроллер:

[ApiController]
public class BindTestController : ControllerBase
{
    [HttpPost("test")]
    public IActionResult SetValue([FromBody] PostModel request)
    {
        if (!ModelState.IsValid)
            return BadRequest();

        return Ok();
    }
}

если я отправлю тело как это:

{}

Мое состояние модели действительно. Как правильно проверить, присутствует ли Date в моем теле, и аннулировать модель?

Спасибо

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Добавьте RequiredAttribute к свойству DateTime, тогда вам нужно сделать значение DateTime обнуляемым, в противном случае вы получите значение по умолчанию для DateTime, равное {0001-01-01T00:00:00}.

Так в основном делают следующее:

public class PostModel
{
    [Required]
    public DateTime? Date { get; set; }
}

Относительно того, почему BindRequired не сработал, я думаю (не уверен на 100%, это именно то, что я думаю), так как вы используете [ApiController], сначала он будет использовать [FromBody] по умолчанию, затем привязку произойдет после десериализации Json.NET, поэтому, когда произойдет deserialization, значение DateTime будет установлено на Default(DateTime). Для решения этой проблемы вы можете использовать старый способ, как показано выше, вместо использования BindRequired или добавить [JsonRequired].

Примечание: при использовании [JsonRequired] с [ApiController] проверка происходит до того, как она достигнет вашей конечной точки. Также обратите внимание, что BindRequired хорошо работает с обычным контроллером MVC.

1 голос
/ 30 мая 2019

Вы можете использовать RequiredAttribute вместо BindRequiredAttribute.В ASP.NET Core последнее применимо только для параметров «без тела»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...