【问题标题】:How to handle too large requestUri for SOCRATA restful calls?如何处理 SOCRATA 宁静呼叫的 requestUri 太大?
【发布时间】:2015-08-13 08:20:17
【问题描述】:

我正在使用对 socrata 数据门户的 RESTful 调用来获取数据。

HttpClient client = new HttpClient();            
client.BaseAddress = new Uri(WebConfigurationManager.AppSettings["APIEndPointHost"]);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string userName = WebConfigurationManager.AppSettings["UserName"];
string password = WebConfigurationManager.AppSettings["PassWord"];
string credentials = userName + ":" + password;
var byteArray = Encoding.ASCII.GetBytes(credentials);
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
client.DefaultRequestHeaders.Add("X-App-Token", WebConfigurationManager.AppSettings["AppToken"]);

 HttpResponseMessage response = new HttpResponseMessage();
string searchCondition = "resource/xxxx-xxxx.json?$where=column1='something'AND column2='something';
 response = client.GetAsync(searchCondition).Result;

问题是有时“searchCondition”可能非常大,超过 5000 个字符,然后在执行时出现以下错误。

发送请求时出错。

服务器违反了协议。 Section=ResponseStatusLine

发生这种情况是因为我发送了一个很大的 requestUri 还是与 socrata 限制搜索条件限制有关?

【问题讨论】:

    标签: c# rest httpresponse restful-url socrata


    【解决方案1】:

    我对@9​​87654321@ 一无所知,但大多数客户端和服务器对 URL 的长度都有限制。我认为8k是我见过的最大的。在某些情况下,它是可配置的,但通常是硬性限制。

    如果您需要如此大的搜索条件,您将不得不使用 POST。用户可以保存这些搜索条件吗?使用POST /search-criteria,后跟GET /resource?search-criteria={id}。或者,您可以将您的搜索设为 POST 请求,但这是一个较差的解决方案,除非您真的,真的需要对服务器只有一个请求。

    【讨论】:

    • 正确的 Eric,SoQL 查询的长度将受到 HTTP RFC 和 HTTP 库将处理的 URI 长度的限制。不幸的是,我们不支持将较大的查询作为 POST 发送,因此您需要简化或分解您的 SoQL 查询以适应这些限制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2022-07-30
    相关资源
    最近更新 更多