【发布时间】:2016-05-13 22:21:54
【问题描述】:
我创建了一个 OData Web API,但在查找主键包含正斜杠的数据时遇到问题。
此网址按预期返回数据:
/api/SalesOrders('12345')
但是这个键中带有正斜杠的失败:
/api/SalesOrders('12345/1')
即使已编码:
/api/SalesOrders('12345%2F1')
在出现的错误中(见下文),看起来最后的正斜杠正在转换为您所期望的反斜杠,因为它是 url 的一部分而不是查询字符串:
如果我改用以下网址,其中正斜杠位于查询字符串中,则数据将正确返回:
/api/SalesOrders?$filter=SalesOrderNumber eq 12345/1
如果我自己生成网址,这将不是什么大问题。
但是,我使用的是OData v4 Client Code Generator
所以代码中的调用实际上是这样的:
var salesOrder = erpClient.SalesOrders.ByKey(worksOrder.SalesOrderNumber).GetValue();
这会生成在查询字符串之前包含正斜杠的 url,因此会失败。
- 这是 OData v4 客户端的已知问题吗?
- 是否有强制使用查询字符串而不是主键类型调用的设置?
我可以通过在查询字符串中强制使用正斜杠来解决这个问题,如下所示:
var salesOrder = erpClient.SalesOrders.Where(so => so.SalesOrderNumber == "12345/1" && so.SalesOrderNumber == so.SalesOrderNumber).FirstOrDefault();
这会在查询字符串中强制使用正斜杠:
/api/SalesOrders?$filter=SalesOrderNumber eq '450993/1' 和 SalesOrderNumber eq SalesOrderNumber
这感觉很混乱,我想避免离开 OData v4 客户端,因为我们有几个应用程序已经在使用它。
我还能做些什么来让这项工作更整洁一些吗?
脚注:
我按照这个博客上的过程来处理特殊字符,但这不包括关于如何处理正斜杠的建议:
【问题讨论】:
标签: c# asp.net asp.net-web-api odata odata-v4