cURL avec authentification utilisateur en C #

Je souhaite effectuer la requête cURL suivante en c #:

curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \ -d 'acme' \ http://localhost:8080/geoserver/rest/workspaces 

J’ai essayé d’utiliser un WebRequest:

 ssortingng url = "http://localhost:8080/geoserver/rest/workspaces"; WebRequest request = WebRequest.Create(url); request.ContentType = "Content-type: text/xml"; request.Method = "POST"; request.Credentials = new NetworkCredential("admin", "geoserver"); byte[] buffer = Encoding.GetEncoding("UTF-8").GetBytes("my_workspace"); Stream reqstr = request.GetRequestStream(); reqstr.Write(buffer, 0, buffer.Length); reqstr.Close(); WebResponse response = request.GetResponse(); ... 

Mais je reçois une erreur: (400) mauvaise requête.

Si je modifie les informations d’identification de la demande et ajoute l’authentification dans l’en-tête:

 ssortingng url = "http://localhost:8080/geoserver/rest/workspaces"; WebRequest request = WebRequest.Create(url); request.ContentType = "Content-type: text/xml"; request.Method = "POST"; ssortingng authInfo = "admin:geoserver"; request.Headers["Authorization"] = "Basic " + authInfo; byte[] buffer = Encoding.GetEncoding("UTF-8").GetBytes("my_workspace"); Stream reqstr = request.GetRequestStream(); reqstr.Write(buffer, 0, buffer.Length); reqstr.Close(); WebResponse response = request.GetResponse(); ... 

Ensuite, je reçois: (401) non autorisé.

Ma question est la suivante: dois-je utiliser une autre classe C # telle que WebClient ou HttpWebRequest ou dois-je utiliser les liaisons Curl pour .NET?

Tous les commentaires ou conseils seraient appréciés.

L’authentification HTTP basique exige que tout ce qui est après «Basic» soit codé en Base64, alors essayez

 request.Headers["Authorization"] = "Basic " + Convert.ToBase64Ssortingng(Encoding.ASCII.GetBytes(authInfo)); 

La solution à ma question a été de changer la propriété ContentType . Si je change le ContentType en

 request.ContentType = "text/xml"; 

la requête fonctionne dans les deux cas, si je convertis également authInfo en Base64Ssortingng dans le dernier exemple, comme l’a suggéré Anton Gogolev .

En utilisant:

 request.ContentType = "application/xml"; request.Credentials = new NetworkCredential(GEOSERVER_USER, GEOSERVER_PASSWD); 

fonctionne également. La seconde définit les informations d’authentification.