tengo un trozo de código que funciona usando la HttpWebRequest y HttpWebResponse pero me gustaría convertirlo a utilizar HttpClient y HttpResponseMessage.HttpWebRequest Vs HttpClient
Este es el trozo de código que funciona ...
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(serviceReq);
request.Method = "POST";
request.ContentType = "text/xml";
string xml = @"<?xml version=""1.0""?><root><login><user>flibble</user>" +
@"<pwd></pwd></login></root>";
request.ContentLength = xml.Length;
using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream()))
{
dataStream.Write(xml);
dataStream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Y este es el código que me gustaría reemplazarlo con, si tan sólo pudiera conseguir que funcione.
/// <summary>
/// Validate the user credentials held as member variables
/// </summary>
/// <returns>True if the user credentials are valid, else false</returns>
public bool ValidateUser()
{
bool valid = false;
try
{
// Create the XML to be passed as the request
XElement root = BuildRequestXML("LOGON");
// Add the action to the service address
Uri serviceReq = new Uri(m_ServiceAddress + "?obj=LOGON");
// Create the client for the request to be sent from
using (HttpClient client = new HttpClient())
{
// Initalise a response object
HttpResponseMessage response = null;
// Create a content object for the request
HttpContent content = HttpContentExtensions.
CreateDataContract<XElement>(root);
// Make the request and retrieve the response
response = client.Post(serviceReq, content);
// Throw an exception if the response is not a 200 level response
response.EnsureStatusIsSuccessful();
// Retrieve the content of the response for processing
response.Content.LoadIntoBuffer();
// TODO: parse the response string for the required data
XElement retElement = response.Content.ReadAsXElement();
}
}
catch (Exception ex)
{
Log.WriteLine(Category.Serious,
"Unable to validate the Credentials", ex);
valid = false;
m_uid = string.Empty;
}
return valid;
}
Creo que el problema está creando el objeto de contenido y el XML no se está conectado correctamente (tal vez).
¿Qué exactamente no funciona? ¿No compila? ¿O tienes errores de tiempo de ejecución? ¿Qué errores? – fretje
¿Cuál es el error? – Aliostad
La solicitud se envía, pero el servicio que maneja la solicitud entrante piensa que no hay datos y, por lo tanto, devuelve "Acceso no autorizado", que es la respuesta predeterminada para ese servicio. – TeamWild