替换Web Api 2.2的类型转换中的默认错误消息



我在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",

返回相同的。

所以,我的问题是:

如何更改此消息

提前感谢

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); }
}
  • 此更改将允许用户将任何内容传递到ProductId中
  • 它将允许您对ProductId值执行正则表达式
  • 它将允许您在RegularExpression属性中返回错误消息

我唯一想添加的是,您应该担心更改消息吗

在我看来,这条信息非常明确,不要将非数字传递到productId中。应由客户进行验证,以确保不会发生这种情况。如果是,则会显示一条用户友好的错误消息,该消息也是由客户端生成的。就我个人而言,我不会试图让Web API传递友好的错误消息,它的PITA加本地化也不是它应该关心的问题(不同语言的消息)。现在,您还必须将所有传入参数更改为字符串类型,然后在代码中对它们进行验证,并为每个参数返回自定义错误消息。

简而言之,最好是:

  • 让服务器代码保持原样,它正在完成自己的工作。这也意味着你在服务器上需要做的编码更少
  • 在将消息发送到服务器之前,请确保客户端在一定程度上验证了输入。如果这是外部API,那么编写文档或生成API文档,调用方在编写接口时可以使用这些文档
  • 处理客户端上的异常和消息

我认为错误消息显示全部是

分析值时遇到意外字符

由于ProductId类型是int,所以系统会首先尝试将JSON值解析为int,然后放入您正在放入的任何验证。它在解析自身时失败了,因此不存在任何其他验证的问题。

我认为,如果您将ProductID的类型更改为字符串,然后启动正则表达式验证,以验证正确格式的输入字符串。正则表达式是在字符串而不是整数上执行的。

相关内容

  • 没有找到相关文章

最新更新