响应“','是一个无效的值开始。路径:$.在Asp.Net Core API中

viv*_*una 9 c# api asp.net-web-api asp.net-core asp.net-core-webapi

我正在Asp.Net Core 3.1中开发API,我下面有一个POST方法(内容类型是application/JSON),我故意将无效的JSON传递给响应,并且响应也非常清晰。但我的问题是我可以进行更改以返回响应吗

国家/地区 ID 为必填字段

对于这个特殊情况。请告诉我是否可以完成,否则,我也同意这个响应(因为这个响应首先检查内容类型是否是有效的 JSON 也是有效的)。

方法:

public ActionResult ValidateFields(ValidateFieldsRequest validateFieldsRequest)
        {
Run Code Online (Sandbox Code Playgroud)

请求类:

public class ValidateFieldsRequest
{
    //string currencyCode, int countryId, string fieldName, string fieldValue

    [Required]
    public string currencyCode { get; set; }
    [Required]
    [RegularExpression("^[1-9]\\d*$", ErrorMessage = "Invalid fieldName.")]
    public int countryId { get; set; }
    [Required]
    [MinLength(1, ErrorMessage = "At least one field required")]
    public List<Field> fields { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

要求:

{
    "currencyCode": "RUB",
    "countryId": ,
    "fields": [{
            "fieldName": "BIC or Bank Code",
            "fieldValue": "12345678901234567"
        },
        {
            "fieldName": "Beneficiary Account Number",
            "fieldValue": "123456"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

回复:

{
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "|6a64d7ad-495850db788356cd.",
    "errors": {
        "$.countryId": [
            "',' is an invalid start of a value. Path: $.countryId | LineNumber: 2 | BytePositionInLine: 28."
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 1

[RegularExpression("^[1-9]\\d*$", ErrorMessage = "Invalid fieldName.")]
public int countryId { get; set; }
Run Code Online (Sandbox Code Playgroud)

上面设置了错误信息,但实际上你发送的json不能这样发送,你应该设置

"countryId": null ,
Run Code Online (Sandbox Code Playgroud)