Отобразить свойство ошибки, когда ошибка неправильного запроса происходит в ASP. NET Core 3.0 - PullRequest
0 голосов
/ 13 февраля 2020

Мне нужно отправить клиенту поле, вызвавшее ошибку в причине запроса об ошибке Bad Request.

Например, пользователь должен отправить string TravelDate, но он отправит мне Date TravelDate, Я хочу сказать клиенту этот файл TravelDate есть проблемы, вы должны отправить string не Date.

Как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Вы можете реализовать IValidatableObject в классе модели, как показано в следующем примере:

public class Test: IValidatableObject
{
    public int Id { get; set; }
    public string TravelDate { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        DateTime dateTime;
        bool isDateTime = false;

        isDateTime = DateTime.TryParse(TravelDate, out dateTime);
        if (isDateTime)
        {
            yield return new ValidationResult($"TravelDate should be a string",new[] { "TravelDate" });
        }
    }
}

Для asp. net core 3.0 , вам нужно обязательно добавьте [ApiController] в свой контроллер:

[ApiController]
[Route("api/[controller]")]
public class ValuesController : Controller
{
    [HttpPost]
    public async Task<ActionResult<Test>> Post(Test machines)
    {
        //do your stuff...
    }
}

Результат: enter image description here

0 голосов
/ 13 февраля 2020
if (!ModelState.IsValid)
{
    return BadRequest(ModelState);
}

Это вернет клиенту все ошибки проверки, которые произошли.

В этой структуре: -

{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|4f2a9400-4d321f2c7fffdb9f.",
"errors": {
    "xxxx": [
        "The value 'xxxsdsd' is not valid."
    ]
}

Затем вы можете прочитать значение ошибки и показать это пользователю.

...