路线属性范围约束与范围属性验证

时间:2015-07-21 19:25:34

标签: c# asp.net-web-api asp.net-web-api2

使用新的属性路由及其约束,似乎边界为什么我应该使用属性来验证我的DTO越来越模糊。

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

我应该何时使用哪种方法,与其他方法相比有哪些优势?

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

VS

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

}

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

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

1 个答案:

答案 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)
{

}