【问题标题】:How to pass query string to POST request in webapi如何在 webapi 中将查询字符串传递给 POST 请求
【发布时间】: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 调用

标签: c# webapi


【解决方案1】:

也许,这是客户端的问题,您是否使用了一些 javascript 框架?如果这是真的,您应该确保您的请求具有正确的标头配置, 例如内容类型 application/json

【讨论】:

  • 您好,当您给出答案时,请尝试提供清晰的步骤以及对问题及其原因的简单直接的解释。你应该避免提问,给出一个非常笼统的答案,你必须尽量简洁明了。
  • 我已经更新了原始问题的更多细节。我们正在使用 devextreme 控件,这个 ajax 调用是针对 datagrid,devextreme 为其间接生成 ajax 调用
猜你喜欢
  • 1970-01-01
  • 2019-06-12
  • 2019-09-24
  • 2015-04-17
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
相关资源
最近更新 更多