Haciendo uso de las clases HttpWebRequest y HttpWebResponse que se encuentran en el NameSpace “System.Net”, podremos trabajar con el protocolo HTTP para realizarle pedidos (GET) y/o enviarle algo de informacion con (POST) a un servidor, explicado este punto vamos a ver el codigo.
//Declaro estas variables cambiale los datos a los de tu cuenta o podrias crearte una ventanita de Login y obtenerlos.
String accountID= "75844";
String accountKey = "-------------------------------------";
String servicesRoot = "https://silverlight.services.live.com/";
Cada procedimiento tiene un nombre entendible así que no hace falta que lo explique.
private void cargarArchivos()
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(servicesRoot + accountID + "/?max-items");
req.Credentials = new NetworkCredential(accountID, accountKey);
try {
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream strm = resp.GetResponseStream();
StreamReader reader = new StreamReader(strm);
XmlTextReader xmlReader = new XmlTextReader(reader);
listElementos.Items.Clear();
while(xmlReader.Read()){
switch(xmlReader.NodeType){
case XmlNodeType.Element:
while(xmlReader.MoveToNextAttribute()){ // En mi caso los mostraba el un ListBox
if(xmlReader.Name.Equals("name")){ listElementos.Items.Add(xmlReader.Value); }
}
break;
}
}
} catch (WebException ex) {
lblMensaje.Text = ex.Message;
}
}
// Este es para poder el tamaño y los tipos de archivos que se encuentran zipeados
private void verSubArchivos(String value)
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(servicesRoot + accountID + "/" + value);
req.Credentials = new NetworkCredential(accountID, accountKey);
try
{
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream strm = resp.GetResponseStream();
StreamReader reader = new StreamReader(strm);
XmlTextReader xmlReader = new XmlTextReader(reader);
listViewDetalles.Items.Clear();
while (xmlReader.Read())
{
switch (xmlReader.NodeType)
{
case XmlNodeType.Element:
while (xmlReader.MoveToNextAttribute())
{
if (xmlReader.Name.Equals("name")) { item = listViewDetalles.Items.Add(xmlReader.Value); }
if (xmlReader.Name.Equals("size")) { item.SubItems.Add(xmlReader.Value); }
if (xmlReader.Name.Equals("mimeType")) { item.SubItems.Add(xmlReader.Value); }
// No se otra forma de leer los atributos de un XML asi que esta es mi forma si hay una mejor diganmela estamos apra aprender no
}
break;
}
}
}
catch (WebException ex)
{
MessageBox.Show(ex.Message);
}
this.Cursor = Cursors.Default;
}
private void eliminarArchivo(String value)
{
if (MessageBox.Show("Esta seguro de querer eliminar ?", "Alerta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(servicesRoot + accountID + "/" + value);
req.Credentials = new NetworkCredential(accountID, accountKey);
req.Credentials = new NetworkCredential(user, pass);
try
{
req.Method = "DELETE";
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream strm = resp.GetResponseStream();
StreamReader rdr = new StreamReader(strm);
string xmlResponse = rdr.ReadToEnd();
if (resp.StatusCode == HttpStatusCode.NoContent)
{
lblMensaje.Text = "Archivo Eliminado !";
}
else
{
lblMensaje.Text = xmlResponse + " - " + returnStatusString(resp) ;
}
}
catch (WebException ex)
{
MessageBox.Show(ex.Message);
}
this.Cursor = Cursors.Default;
}
}
private void subirArchivo(String nombre, String ruta)
{
FileInfo info = new FileInfo(ruta);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(servicesRoot + accountID + "/" + nombre + "/" + info.Name);
req.Credentials = new NetworkCredential(accountID, accountKey);
string strFile = txtUrl.Text;
req.Method = WebRequestMethods.Http.Put;
req.ContentType = "application/zip";
try
{
FileInfo fInfo = new FileInfo(strFile);
long numBytes = fInfo.Length;
FileStream fileStream = new FileStream(strFile, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fileStream);
byte[] data = br.ReadBytes((int)numBytes);
br.Close();
req.ContentLength = data.Length;
lblMensaje.Text = "Subiendo Archivo : " + fInfo.Name;
using(Stream requestStream = req.GetRequestStream()){
requestStream.Write(data, 0, data.Length);
}
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
MessageBox.Show(resp.StatusCode.ToString());
}
catch (WebException ex)
{
lblMensaje.Text = ex.Message;
}
}
El codigo se puede mejorar y ahorrar lineas como el HttpWebRequest lo estoy usando varias veces claro podriamos crear una funcion que nos lo retorne ya autentificado y con su metodo usando las Enumeraciones . ahora podran administrar su archivos desde su escritorio aqui les dejo la referencia del API.
Enumeraciones
http://canyouhearthebits.wordpress.com/2008/08/25/enumeraciones-manipulacion-de-bits-flags/






















































































Comentarios recientes