98 votes

L'ajout d'en-têtes HttpClient génère une FormatException avec certaines valeurs

Ceci s'est produit dans le contexte du codage contre Google Cloud Messaging, mais s'applique ailleurs.

Considérez ce qui suit :

var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("key=XXX");

et

var http = new HttpClient();
http.DefaultRequestHeaders.Add("Authorization", "key=XXX");

qui génèrent toutes deux une FormatException :

System.FormatException : Le format de la valeur 'key=XXX' est invalide.

La solution consiste à supprimer le signe égal.

  1. En creusant dans reflector, on s'aperçoit qu'il y a des tas de codes de validation et d'analyse qui s'exécutent lors de l'ajout d'une nouvelle valeur d'en-tête. Pourquoi tout cela est-il nécessaire ? Ce client ne devrait-il pas simplement s'écarter de notre chemin ?

  2. Comment échapper au signe égal pour que l'ajout de cette valeur réussisse ?

0voto

alhpe Points 574

Dans mon cas, je génère des valeurs de chaîne ETags à partir d'un champ SQL byte[] RowVersion. J'ai donc besoin d'ajouter la chaîne générée, c'est-à-dire AAAAAAAAF5s= à l'intérieur de " comme suit...

        var eTag = department.RowVersion.ToETagString();

        httpClient.DefaultRequestHeaders.Add(Microsoft.Net.Http.Headers.HeaderNames.IfMatch, $"\"{eTag}\"")

    public class DepartmentForHandleDto
    {
        public string Name { get; set; }
        public string GroupName { get; set; }
        public byte[] RowVersion { get; set; }
    }

    public static class ByteArrayExtensions
    {
        public static string ToETagString(this byte[] byteArray)
        {
            return Convert.ToBase64String(byteArray != null && byteArray.Length > 0 ? byteArray : new byte[8]);                    
        }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X