C# Web API OData(OData客户端v4)键中的正斜杠
我创建了一个ODataWebAPI,但在查找主键包含正斜杠的数据时遇到问题 此url按预期返回数据:C# Web API OData(OData客户端v4)键中的正斜杠,c#,asp.net,asp.net-web-api,odata,odata-v4,C#,Asp.net,Asp.net Web Api,Odata,Odata V4,我创建了一个ODataWebAPI,但在查找主键包含正斜杠的数据时遇到问题 此url按预期返回数据: /api/SalesOrders('12345') 但是这个键中带有正斜杠的键失败了: /api/SalesOrders('12345/1') 即使编码: /api/SalesOrders('12345%2F1') 在出现的错误(请参见下文)中,最后一个正斜杠似乎正被转换为反斜杠,因为它是url的一部分,而不在查询字符串中: 如果改为使用以下url,其中正斜杠位于querystring中,则正
/api/SalesOrders('12345') 但是这个键中带有正斜杠的键失败了:
/api/SalesOrders('12345/1')
即使编码:
/api/SalesOrders('12345%2F1') 在出现的错误(请参见下文)中,最后一个正斜杠似乎正被转换为反斜杠,因为它是url的一部分,而不在查询字符串中: 如果改为使用以下url,其中正斜杠位于querystring中,则正确返回数据:
/api/SalesOrders?$filter=SalesOrderNumber eq 12345/1
如果我自己生成URL,这不会是什么大问题。
但是,我正在使用 因此,调用代码实际上如下所示:
var salesforder=erpClient.salesforders.ByKey(worksOrder.salesfordernumber.GetValue()代码>
这将生成url,该url在查询字符串之前包含正斜杠,因此失败
这是ODataV4客户端的已知问题吗
是否存在强制在主键类型调用上使用querystring的设置
我可以通过在querystring中强制使用正斜杠来解决这个问题,如下所示:
var salesforder=erpClient.salesforders.Where(so=>so.salesfordernumber==“12345/1”&&so.salesfordernumber==so.salesfordernumber).FirstOrDefault()代码>
这将强制将正斜杠插入查询字符串:
/api/SalesOrders?$filter=SalesOrderNumber eq'450993/1'和SalesOrderNumber eq SalesOrderNumber
这感觉很混乱,我想避免离开ODataV4客户端,因为我们有几个应用程序已经在使用它了
我还能做些什么使这项工作更整洁些吗
脚注:
我在这个博客上遵循了处理特殊字符的过程,但这并不包括如何处理正斜杠的建议:
可能odata弄乱了,因为它可以轻松阅读
即使它是编码的,我的意见是您必须在请求内容中将参数作为对象发送。
你可以看得更清楚
希望这些帮助可能是odata弄糟了,因为它可以轻松阅读
即使它是编码的,我的意见是您必须在请求内容中将参数作为对象发送。
你可以看得更清楚
希望这些帮助看看Github上的。基本思想是对Parse
方法进行子类化和重写。然后在Web API配置代码中为该方法提供自定义路径处理程序的实例。查看Github上的。基本思想是对Parse
方法进行子类化和重写。然后,在Web API配置代码中为该方法提供自定义路径处理程序的实例。这可能是任何正在寻找类似解决方案的人都会看到的,就在“OData路由”部分下
…为了防止此错误,您的客户端应该对斜杠(%252F)和反斜杠(%255C)使用双转义序列…这可能是任何正在寻找类似解决方案的人都会看到的,就在“OData路由”部分下
…为了防止此错误,您的客户端应该对斜杠(%252F)和反斜杠(%255C)使用双转义序列…向函数或操作提交POST请求肯定会避免此问题,因为数据将位于请求正文中。如果我可以在服务器端做一些事情,这样我就不必为我的所有实体单独创建GetByKey[POST]操作,那就太好了。我将对此进行研究。向函数或操作提交POST请求肯定会避免这个问题,因为数据将在请求正文中。如果我可以在服务器端做一些事情,这样我就不必为我的所有实体单独创建GetByKey[POST]操作,那就太好了。我会调查这个。更新的链接更新的链接