visual validar usuarios usuario tipos privilegios gestion formulario descargar con autenticación agregar c# .net authentication curl geoserver

validar - cURL con autenticación de usuario en C#



usuarios en c# (3)

La autenticación básica HTTP requiere que todo lo que se encuentre después de "Básico" esté codificado en Base64, así que intente

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

Deseo hacer la siguiente solicitud de cURL en c #:

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

He intentado usar una WebRequest:

string 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("<workspace><name>my_workspace</name></workspace>"); Stream reqstr = request.GetRequestStream(); reqstr.Write(buffer, 0, buffer.Length); reqstr.Close(); WebResponse response = request.GetResponse(); ...

Pero recibo un error: (400) Solicitud incorrecta.

Si cambio las credenciales de solicitud y agrego la autenticación en el encabezado:

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

Entonces obtengo: (401) No autorizado.

Mi pregunta es: ¿Debo usar otra clase C # como WebClient o HttpWebRequest o tengo que usar los enlaces curl para .NET?

Todos los comentarios u orientación serán apreciados.


La solución a mi pregunta fue cambiar la propiedad ContentType . Si cambio el ContentType a

request.ContentType = "text/xml";

la solicitud funciona en ambos casos, si también convierto el authInfo a un Base64String en el último ejemplo, como sugirió Anton Gogolev .


Utilizando:

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

también funciona El segundo establece la información de autenticación.