我在Web Api 2.2(C#)中创建了一个RESTful服务
该方法的输入如下:
public HttpResponseMessage Post([FromBody] PaymentInput paymentInput)
我的PaymentInput对象具有以下属性:
[Required]
[RegularExpression(@"^[0-9\.]*$", ErrorMessage = "ProductId must be an integer")]
public int ProductId { get; set; }
在任何情况下,我都会收到默认错误消息,而不是我的错误消息,我认为因为模型验证是先完成的,而不是正则表达式验证。
例如:
"productId": helloworld,
返回:
{
"message": "The request is invalid."
"modelState": {
"paymentInput.productId": [2]
0: "Unexpected character encountered while parsing value: v. Path 'productId', line 6, position 30."
-
}-
}
以下案例:
"productId": "helloworld",
返回相同的内容。
所以,我的问题是:
如何更改此消息?
提前致谢并致以亲切的问候
答案 0 :(得分:1)
我认为错误消息说明了所有
解析值时遇到意外的字符
因为,ProductId类型是int,所以系统首先尝试将JSON值解析为int,然后将进行任何验证。在解析自身时失败了,因此不存在任何其他验证的问题。
我认为如果您将ProductID的类型更改为字符串,那么您的正则表达式验证将启动以验证正确格式的输入字符串。正则表达式是在字符串而不是整数上执行的。
答案 1 :(得分:1)
public class PaymentInput {
// [Required] //removed Required unless you want a different message if nothing is provided
[RegularExpression(@"^[0-9\.]+$", ErrorMessage = "ProductId must be an integer")]
// changed regex to + instead of * which forces it to have at least 1 passed in character
public string ProductId { get; set; }
public int GetProductId() { return int.Parse(ProductId); }
}
RegularExpression
属性中返回错误消息。我唯一想补充的是,您是否应该担心更改消息?
在我看来,信息非常明确,不会将非数字传递给productId。验证应由客户进行,以确保不会发生这种情况。如果确实如此,则表示客户端也生成了用户友好的错误消息。我个人不会尝试让Web API传回友好的错误消息,它的PITA加本地化不是它应该关注的东西(不同语言的消息)。此外,您现在必须将所有传入参数更改为字符串类型,然后在代码中对它们进行验证,并为每个参数返回自定义错误消息。
简而言之,最好是: