gpt4 book ai didi

asp.net - 如何在普通 ApiController 中从 oData 查询字符串手动填充 ODataQueryOptions?

转载 作者:行者123 更新时间:2023-12-05 06:43:37 25 4
gpt4 key购买 nike

我在 OData v4 中使用 ApiController(不是 ODataController),其中有一个将 ODataQueryOptions 作为参数的 Get 操作,如下所示:

public Product[] Get(ODataQueryOptions<Product> queryOptions){
// Do query ...
}

当我通过网络 API 调用将 oData 查询请求作为 uri 发送到 ApiController 时,ODataQueryOptions 将自动填充。但是,当查询字符串很长时,我会遇到异常。我相信异常是由uri的长度超过限制引起的。我正在考虑通过请求主体传递 odata 查询字符串,而不是直接通过 uri,希望绕过 uri 长度限制问题。例如,

public Product[] Get([FromBody] uriString){
// var oDataQueryOptions = SomeMethod(uriString);
// Do query ...
}

似乎可以使用 ODataQueryContext 和 HttpRequestMessage 构造 ODataQueryOptions:

public ODataQueryOptions(
ODataQueryContext context,
HttpRequestMessage request
)

ODataQueryContext 又可以使用

构造
public ODataQueryContext(
IEdmModel model,
Type elementClrType,
ODataPath path
)

我能够获取模型 (IEdmModel) 和 elementClrType (Type)。但是,我不知道如何从查询 uri 中获取 ODataPath。

另外,我可以使用 uri 字符串(可能很长)构造一个 HttpRequestMessage 吗?

同样,我使用的是带有 OData V4 的普通 ApiController。

任何帮助将不胜感激!

最佳答案

  1. 关于生成 ODataPath,您可以使用 ODataPath DefaultODataPathHandler.Parse(IEdmModel model, string serviceRoot, string odataPath)。 odatapath 是 url 转义服务根和查询选项部分。

  2. HttpRequestMessage 的构造函数非常简单,例如:new HttpRequestMessage(HttpMethod.Get, "http://example.com")

但我不确定您是否可以通过这种方式绕过查询 url 长度限制。我认为 WebAPI OData 实际上对您尝试做的事情做同样的事情。

关于asp.net - 如何在普通 ApiController 中从 oData 查询字符串手动填充 ODataQueryOptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32593087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com