HttpClient: L'uri de la chaîne est trop longue
Suivants tentent d'envoyer des données à un service web qui génère des fichiers PDF, PDF fusée (qui est impressionnant par la voie).
Je reçois le message d'erreur URI non Valide: L'uri de la chaîne est trop longue
Pourquoi serait-on imposer une limite arbitraire sur POST
ed de données?
using (var client = new HttpClient())
{
//Build the conversion options
var options = new Dictionary<string, string>
{
{ "value", html },
{ "apikey", ConfigurationManager.AppSettings["pdf:key"] },
{ "MarginLeft", "10" },
{ "MarginRight", "10" }
};
//THIS LINE RAISES THE EXCEPTION
var content = new FormUrlEncodedContent(options);
var response = await client.PostAsync("https://api.html2pdfrocket.com/pdf", content);
var result = await response.Content.ReadAsByteArrayAsync();
return result;
}
Je reçois ce ridicule erreur.
{System.UriFormatException: Invalid URI: The Uri string is too long.
at System.UriHelper.EscapeString
at System.Uri.EscapeDataString
at System.Net.Http.FormUrlEncodedContent.Encode
at System.Net.Http.FormUrlEncodedContent.GetContentByteArray
Cela me rappelle de 640k
devrait être suffisant... je veux dire vraiment?
Avec un poste peut inclure le contenu dans le message http au lieu de l'URI. Un uri a une longueur max de 2083 caractères.
aaah, ça fait du sens, comment?
Pourquoi utiliser un service web pour faire des PDF HTML si vous pouvez le faire vous-même avec un accès gratuit à la bibliothèque?
Voir ce donc, la question, dans ce cas, ils l'envoient en json dans le message http. Il n'y a pas de limitation sur la longueur des données lorsqu'il est fait de cette façon. Créer une chaîne json à l'aide de
Suis-je donc raison de dire qu'il n'est pas construit en équivalent dans
aaah, ça fait du sens, comment?
Pourquoi utiliser un service web pour faire des PDF HTML si vous pouvez le faire vous-même avec un accès gratuit à la bibliothèque?
Voir ce donc, la question, dans ce cas, ils l'envoient en json dans le message http. Il n'y a pas de limitation sur la longueur des données lorsqu'il est fait de cette façon. Créer une chaîne json à l'aide de
JsonConvert.SerializeObject
et ensuite l'envoyer comme une chaîne de caractères contenu à l'aide de StringContent
et l'envoyer.Suis-je donc raison de dire qu'il n'est pas construit en équivalent dans
HttpClient
pour UploadValues("https://api.html2pdfrocket.com/pdf", options)
dans le WebClient
classe?OriginalL'auteur Jim | 2016-07-18
Vous devez vous connecter pour publier un commentaire.
Avec un poste peut inclure le contenu dans le message http au lieu de l'URI. Un uri a une longueur max de 2083 caractères. Vous pourriez l'envoyer sous forme de JSON dans le message http au lieu de l'URI qui est la méthode recommandée pour envoyer de grandes quantités de données dans un HttpPost/HttpPut. J'ai modifié ton code pour l'utiliser. Cela suppose que votre service, vous pouvez contacter le travail avec JSON (.net Web Api hors de la boîte devrait avoir aucun problème avec cela).
Assurez-vous d'installer newtonsoft json.
il serait bon de savoir si il y a une construite dans l'équivalent de la
WebClient
,UploadValues
méthode, qui permet de ne pas utiliser json, et toujours gérer pour afficher tous les le contenu.href="http://stackoverflow.com/a/27548828/1260204">ce AFIN de répondre peut-être l'approche que vous recherchez.
merci, c'exemple les postes d'une valeur unique, mais le principe s'applique - fou, il n'est pas intégré dans l' - merci pour votre aide.
comme une question d'intérêt, les données que j'ai écris est en fait pas dans l'url, c'est posté exactement comme
StringContent
. L'erreur n'est pas en utilisant une méthode incorrecte, l'erreur est dans une limite arbitraire sur leEscapeDataString
queFormUrlEncodedContent
arrive à utiliser.OriginalL'auteur Igor
Je viens de résoudre un problème similaire. Pour moi j'ai été à l'intégration avec un backend je n'ai pas le contrôle et a dû afficher un fichier avec les données du formulaire (par exemple, le code client) comme variables de formulaire. Donc passer en JSON ou plusieurs parties de casser le backend je n'ai pas de contrôle. Le problème est que les fichiers volumineux serait la cause de la FormUrlEncodedContent lever une erreur en disant: "L'uri de la chaîne est trop longue".
C'est le code qui a résolu pour moi, après deux jours d'effort (note doit encore être modifié pour être ASYNCHRONE).
OriginalL'auteur Brian
Si, comme moi, vous êtes confronté à certains déglingués 3ème partie service web qui n'acceptent contenu d'un formulaire, vous pouvez contourner le problème comme ceci:
OriginalL'auteur Mick Byrne
@Mick Byrne :
Merci - votre solution a fonctionné comme un charme!
Voici mon code complet:
OriginalL'auteur Robert Stefanowicz