【发布时间】:2015-07-03 13:34:25
【问题描述】:
我有以下配置的路线:
routes.MapHttpRoute("oneKey",
"{controller}/{id}");
如果我转到端点/users/Maticicero,路由将正确委派给我的UsersController 类中的GET 方法。
但是,我得到的是 id 参数,就像输入的一样,例如 Maticicero。
由于这是我的数据库的主键,并且比较区分大小写,我需要将我的 id 规范化为小写,即:
id = id.ToLower()
我必须在每个控制器和每个采用id 参数的方法中执行此操作。
有没有办法告诉我的 Web Api(或路由处理程序)自动将这些参数(或整个 url)小写?
【问题讨论】:
-
@naveen 这是一个路由约束。它不会修改值,如果不是小写,它将无法匹配路由。这不是 OP 要求的。
-
是的。我想还是困了。删除评论:)
-
为什么不使用在查找中不会混淆的主键。例如 INT 或 GUID。如果您需要搜索名称,请使用
Name LIKE '%name%' -
@Xenolightning 我们目前使用 AWS
DynamoDB作为我们的持久化策略。虽然使用 int 键是可行的,但服务器将负责生成关联的 id(因为 DynamoDB 不支持自动增量键),这将使我们为每个用户创建一个 GUID,这些用户会弄乱 URL。为此,我们选择了用户名作为主键(它也符合用户名必须唯一的要求) -
@MatiCicero 您是否直接从控制器查询 DynamoDb?如果是这样,您可能需要考虑在数据访问上使用存储库。它将允许您为 Db 查询实现一致的逻辑。
Controller -> UserRepository (call ToLower here) -> DynamoDb。仅依靠 WebApi 为您提供字符串的正确大小写是非常脆弱的代码。
标签: c# asp.net asp.net-web-api