Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# Asp.NETMVC4WebAPI-我们是否需要OData来构建快速查询服务_C#_Asp.net Mvc_Asp.net Mvc 4_Asp.net Web Api_Odata - Fatal编程技术网

C# Asp.NETMVC4WebAPI-我们是否需要OData来构建快速查询服务

C# Asp.NETMVC4WebAPI-我们是否需要OData来构建快速查询服务,c#,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,odata,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,Odata,我们正在为具有以下要求的客户构建查询服务: 支持Where、Begin、Contains和/或Paging、Select。(1-main) 查找/映射从一个值到另一个值的多个值。客户端将传递数百个值,并返回相同数量的值。(二) 为无效请求返回一些明确的错误代码(缺少参数、指定的未知字段、指定的未知位置条件等)(3) 对于(1)和(2),我们已经看到OData具有强大的语法来支持它们,(OData+WebAPI)可能是一个好的/灵活的解决方案,但我们有一些顾虑: 客户端希望通过POST而不是

我们正在为具有以下要求的客户构建查询服务:

  • 支持Where、Begin、Contains和/或Paging、Select。(1-main)
  • 查找/映射从一个值到另一个值的多个值。客户端将传递数百个值,并返回相同数量的值。(二)
  • 为无效请求返回一些明确的错误代码(缺少参数、指定的未知字段、指定的未知位置条件等)(3)
对于(1)和(2),我们已经看到OData具有强大的语法来支持它们,(OData+WebAPI)可能是一个好的/灵活的解决方案,但我们有一些顾虑:

  • 客户端希望通过POST而不是GET传递查询,因为(2)中的筛选器太大。我们看到了一些,所以我们考虑这两种OData解决方案:($batch-supported OData-endpoint,POST-OData-URI,并手动将其解析为)
  • 对于OData端点查询性能存在一些担忧。这是否足够好,或者我们可以使用POST-odatauri并使用定制存储过程来获得最佳性能
  • 对于(3),我们似乎还没有找到调用OData enpoints以返回正确错误代码的方法
我们还考虑构建一个自定义JSON对象,与ODataQueryOption非常相似,并在OData无法以良好性能完全处理这些需求的情况下,为这些需求中的每一个使用Web.API操作。但这将是我们最后的选择。

那么,您如何选择实施上述3项?谢谢。

我会先调查一下,看看是否足够。这样,您就不需要为您的第二个需求(这将是您的第一个解决方案)重新实现任何低级的东西

查询性能通常与后端一样好,此时不应考虑解析URI。如果您使用的是实体框架,那么请查看Linq查询的外观,并最终了解它们如何转换到真正的后端

指定了错误报告。请注意,您将能够。使用ASP.NET Web API+OData扩展,您可以使用多种方法创建此类响应。看和看

我想你的第一个要求已经完全满足了


最终,你将不得不凭直觉行事,或者,如果你有足够的时间进行技术评估,可以玩一些原型并运行一些实际数字。

谢谢。我们将研究OData+WebAPI中的错误。关于性能,我认为我们将尝试一些基于纯Linq SP的定制SP,并将其放在EntitySetController/Get endpoint中。顺便说一句,我们成功地实现了它,它可以很好地处理很长的查询。