[英]How to pass query string to POST request in webapi
我想將 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 長度問題仍然存在。
默認情況下,我們使用 Devextreme 組件創建 Ajax 調用。 因此,默認情況下,內容類型設置為“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); }");
}
也許,這是客戶端的問題,您是否使用了一些 javascript 框架? 如果這是真的,您應該確保您的請求具有正確的標頭配置,例如內容類型 application/json
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.