Слишком длинный URI в сообщении

Я делаю запрос, используя RestClient и RestRequest, после добавления параметров, которые я получаю

Ошибка:

Invalid URI: The URI string is too long. 

Я предполагаю, что это как-то связано с неправильной публикацией данных. Вот мой код:

RestClient client = new RestClient();
client.BaseUrl = "URL";
client.Authenticator =
    new HttpBasicAuthenticator("api",
            "KEY");
RestRequest restRequest = new RestRequest(Method.POST);
restRequest.AddParameter("domain",
            "DOMAIN", ParameterType.UrlSegment);
restRequest.Resource = "{domain}/messages";
restRequest.AddParameter("from", (string) sender["alias"] + "<email>");
restRequest.AddParameter("to", (string)recipient["alias"] + "<" + (string)recipient["email"] + ">");
restRequest.AddParameter("subject", subject);
restRequest.AddParameter("html", body);              
var result = client.Execute(restRequest);
if (result.StatusCode != System.Net.HttpStatusCode.OK)
{
     throw new Exception(result.ErrorMessage,new Exception(result.StatusCode + " - " + result.StatusDescription));
}

Параметр body может быть очень длинным, поскольку это электронное письмо в формате HTML. Что вызывает вышеуказанную ошибку?

Вот запрос, который код делает, используя более короткое тело, чтобы он отправлял http://pastebin.com/HgbBHVpC

Полная трассировка стека, включая сообщение о попытке отправки http://pastebin.com/dRhXire6


person Mike Norgate    schedule 19.12.2012    source источник
comment
вы, вероятно, делаете get запрос, в то время как вам нужно сделать post запрос   -  person bart s    schedule 19.12.2012
comment
Я делаю сообщение, как вы можете видеть в коде, для метода установлено значение POST в конструкторе для RestRequest.   -  person Mike Norgate    schedule 19.12.2012
comment
Вы уверены, что добавляете параметры в тело запроса, а не в строку запроса?   -  person lavrik    schedule 19.12.2012
comment
согласно документации из RestRequest, это правильный путь. Вот сводка для метода AddParameter «Добавляет параметр HTTP к запросу (QueryString для GET, DELETE, OPTIONS и HEAD; закодированная форма для POST и PUT)»   -  person Mike Norgate    schedule 19.12.2012
comment
@MikeNorgate, извините, упустил это из виду.   -  person bart s    schedule 19.12.2012


Ответы (3)


http://msdn.microsoft.com/en-us/library/z6c2z492.aspx

Глядя на документ, он говорит, что длина uriString превышает 65519 символов.

person Dan OConnell    schedule 19.12.2012
comment
но в почтовом запросе данные не должны помещаться в URI? - person Mike Norgate; 19.12.2012
comment
У вас есть полный стек из исключения? - person Dan OConnell; 19.12.2012
comment
Попробуйте выполнить код RestSharp, вы можете загрузить его с github.com/restsharp/RestSharp. Я только что попытался воссоздать его, и URI был успешно создан с использованием тела, которое вы мне прислали. Выполнить не удалось из-за некоторой безопасности, и это может быть мой тестовый код, который не проверяет ваш код таким же образом, но он действительно создал URI в порядке. - person Dan OConnell; 20.12.2012

Может быть request.AddParameter(contentTyp, ContentItself, ParameterType.RequestBody); или request.AddBody. Также попробуйте использовать что-то вроде fiddler, чтобы проверить, какой фактический запрос (url\body) вы отправляете.

person lavrik    schedule 19.12.2012
comment
добавление ParameterType.RequestBody дает ошибку BadRequest. Глядя на вывод скрипача, тип контента закодирован в форме, а отправленные данные находятся в теле, а не в строке запроса. - person Mike Norgate; 19.12.2012
comment
Я обновил вопрос, включив в него запрос, скопированный из Fiddler. - person Mike Norgate; 19.12.2012

Похоже на известную особенность RestSharp:

https://groups.google.com/forum/?fromgroups#!topic/restsharp/9b5bpK3gt9g

person drenerbas    schedule 11.07.2014