路由属性范围约束vs范围属性验证

本文关键字:属性 范围 验证 vs 约束 路由 | 更新日期: 2023-09-27 18:03:47

随着新的属性路由和它的约束,似乎边界为什么我应该使用属性来验证我的DTO变得越来越模糊。

我现在可以用两种方式进行范围验证-考虑第一种方法有一个带有复杂类+权重属性的操作-

我应该在什么时候使用哪一种方法,它们相对于另一种方法有什么优势?

[Range(0,500)]
public int Weight {get;set;}

[GET("{id:range(0, 500)}")]
public Machine GetMachine(int weight)
{
}

第一种方法导致一个错误的请求。

第二种方法导致未找到请求。

路由属性范围约束vs范围属性验证

你的最后两句话总结得很好。在[Range]的情况下,它设置了输入的验证,因此它可以告诉调用者他们的请求是错误的。在第二部分中,它定义了将URL与路由匹配的规则,这些规则将用于向不同的路由发送请求,而不是用于验证输入。第二种可能是有用的,例如,如果你有不同格式的id,你想用不同的方法处理。

简而言之,第一种情况的用户体验是"我一定发送了无效数据",第二种情况是"我一定有错误的URL"。

:

下面的示例演示了我对不同格式如何使用route属性的意思:

[GET("/users/{id:int}")]
public User GetUserById(int id)
{
}
[GET("/users/{email:regex(^[^@]+@[^@]$)}")]
public User GetUserByEmail(string email)
{
}
[GET("/users/{username}")]
public User GetUserByName(string username)
{
}