Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Web API OData(OData客户端v4)键中的正斜杠_C#_Asp.net_Asp.net Web Api_Odata_Odata V4 - Fatal编程技术网

C# Web API OData(OData客户端v4)键中的正斜杠

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中,则正

我创建了一个ODataWebAPI,但在查找主键包含正斜杠的数据时遇到问题

此url按预期返回数据:
/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]操作,那就太好了。我会调查这个。更新的链接更新的链接