我正在尝试使用我的api路线模式。
这些都是GET请求
/users -- get all users
/users/{userId} -- get user by id
/users/email/{email} -- get user by email
OBV。第三个问题是一个问题,因为路由的最后一部分会有/ user@domain.com,因此路由不会被处理,因为它认为我正在尝试去另一个域(例如:http://localhost/users/email/me@microsoft.com
我知道我可以通过POST来完成这项工作,我知道我可以使用/ users / {email} / gedderdone等其他组合来完成这项工作
...但我正在尝试遵循一致的所有资源模式。
即:
/people/{id}
/people/name/{name}
/people/ssn/{ssn}
如何格式化REST端点以通过电子邮件地址获取用户?我确实想要使用GET,因为我正在“获得”用户。
谢谢:-)
答案 0 :(得分:0)
C#-HTMLEncode或Javascript-escape您的参数。这应该会有所帮助。
答案 1 :(得分:0)
不要害怕在您的请求中使用参数
e.g
/users
/users/{userid}
/users/email?address=me@microsoft.com
个人而言,我倾向于将用户视为“纯粹”资源,并通过参数来区分获取用户的方式(除了通过/users/1
获取不变的唯一ID等)/ p>
/users/?by=email&value=me@microsoft.com
/users/?by=ssn&value=123345
/users/?by=shoesize&value=10
REST中没有任何内容表明您必须纯粹通过路由值来识别资源;如果您坚持使用纯路由值模式,并且发现需要通过多个字段检索用户,那么您最终将需要编写像users/department/development/project/14567/location/dublin
这样的疯狂路由,这听起来很酷,直到有人想按位置调用它然后通过项目,然后是部门等。
答案 2 :(得分:0)
根据RFC3986,“@”符号是保留的符号。因此,您必须将百分比编码传递为%40 - 其他任何内容都无效。