使用新的属性路由及其约束,似乎边界为什么我应该使用属性来验证我的DTO越来越模糊。
我现在可以通过两种方式进行范围验证 - 考虑第一种方法有一个具有复杂类+权重属性的操作 -
我应该何时使用哪种方法,与其他方法相比有哪些优势?
[Range(0,500)]
public int Weight {get;set;}
VS
[GET("{id:range(0, 500)}")]
public Machine GetMachine(int weight)
{
}
第一种方法导致错误请求。
第二种方法导致未找到请求。
答案 0 :(得分:1)
你的最后两句话总结得很好。在[Range]
的情况下,它设置输入的验证,以便它可以告诉调用者他们的请求是坏的。在第二个中,它定义了将URL与路由匹配的规则,该规则将用于向不同路由发送请求,而不是用于验证输入。第二个可能很有用,例如,如果您要使用不同的方法处理不同格式的ID。
简而言之,第一个用户体验将是“我必须发送无效数据”,第二个用户体验“我必须使用错误的网址。”
<强>更新强>:
以下是我对如何使用不同格式的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)
{
}