0

我正在使用对 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 限制搜索条件限制有关?

4

1 回答 1

0

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

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

于 2015-08-14T15:38:47.963 回答