【发布时间】:2020-11-03 17:32:39
【问题描述】:
我想将 WebApi 中的 GET 请求更改为 POST 请求,因为我发送的查询字符串太大,即使使用最大字符串长度,我仍然收到 404 错误。 所以我在正文中发送搜索查询,而不是我遇到问题的 URI,这里 ODataQueryOptions 对象没有从 POST 方法中填充。 POST 请求现在如下所示:
[HttpPost]
public HttpResponseMessage GetSession([FromBody] ODataQueryOptions<SessionModel> queryOptions)
{
return executeMethodA<DataBaseSessionResult, SessionModel>(
() => sessionController.GetData(User, queryOptions),
(resultObj) => FilterTranslator.ConvertTimeFormat(resultObj.Return.Data),
(resultObj) => resultObj.Return.TotalRecords,
(resultObj) => resultObj.ErrorCode);
}
如您所见,我试图从请求正文而不是从 URI 填充查询选项。到目前为止,我还无法从请求中获取 ODataQueryOptions 参数,并且该参数导致为“空”。如果我删除“[FromBody]”属性,查询选项对象将从请求 URI 中正确填充,但仍然存在相同的 URI 长度问题。
我们使用的是默认创建 Ajax 调用的 Devextreme 组件。所以默认情况下内容类型设置为'application/x-www-form-urlencoded' 下面是我将 API 方法请求作为 POST 传递的代码,如果这有助于并让问题更加清晰
public static ODataSourceBuilder ConfigureOData(this ODataSourceBuilder odsb, string url)
return odsb
.Url(url)
.Version(4)
.BeforeSend("function(e) { e.method = 'POST'; }")
.OnLoading("function(e){ onDataLoading(e); }")
.OnLoaded("function(e){ onDataLoaded(e); }")
.ErrorHandler("function(e){ onErrorOccured(e); }");
}
【问题讨论】:
-
您能说明您是如何提交数据的吗?
-
我已经更新了原始问题的更多细节。我们正在使用 devextreme 控件,这个 ajax 调用是针对 datagrid,devextreme 为其间接生成 ajax 调用