C# 在ASP.NET Core 3.0中发生错误请求时显示错误属性

C# 在ASP.NET Core 3.0中发生错误请求时显示错误属性,c#,asp.net,asp.net-core,asp.net-core-webapi,C#,Asp.net,Asp.net Core,Asp.net Core Webapi,我需要将导致错误请求的请求原因中出现错误的字段发送到客户端 例如,必须向用户发送字符串TravelDate,但它向我发送日期TravelDate,我想对客户端说,此文件TravelDate有问题,您必须发送字符串而不是日期 我怎样才能解决这个问题 if (!ModelState.IsValid) { return BadRequest(ModelState); } 这将向客户端发回发生的所有验证错误 在这种结构中:- { "type": "https://tools.ietf.org/

我需要将导致
错误请求的请求原因中出现错误的字段发送到客户端

例如,必须向用户发送
字符串TravelDate
,但它向我发送
日期TravelDate
,我想对客户端说,此文件
TravelDate
有问题,您必须发送
字符串
而不是
日期

我怎样才能解决这个问题

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."
    ]
}

然后,您可以读取错误值并将其显示给用户。

您可以在模型类中实现
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" });
        }
    }
}
结果:

这不是工人。它向我显示这条
消息:“Microsoft.AspNetCore.Mvc.ValidationProblemDetails”
当我发送请求并且有一个模型并且它有一个错误的请求时,它没有进入控制器hi@kia kia,我的回答对你有帮助吗?如果有,你能接受我的回答吗?参考:。好问题kia kia!漂亮的回答,丽娜!
[ApiController]
[Route("api/[controller]")]
public class ValuesController : Controller
{
    [HttpPost]
    public async Task<ActionResult<Test>> Post(Test machines)
    {
        //do your stuff...
    }
}