2009-12-03 42 views
9

Estoy tratando de consumir API REST desde mi aplicación .NET. Esta API está escrita en JAVA. Se me pide que pase las credenciales de autenticación con los encabezados HTTP. ¿Cómo puedo pasar estas credenciales de autenticación como 'DATE', 'AUTHORIZATION' y 'Accept' a través de encabezados HTTP.Consumir API REST desde .NET

Qué clase en .NET puedo usar para realizar esta tarea. Puede alguien ayudarme con esto?

Toda su ayuda será apreciada.

Ajish.

Respuesta

13

actualización

Esta biblioteca ha sido sustituido por http://nuget.org/packages/Microsoft.Net.Http/2.1.10


utilizar la biblioteca cliente Microsoft.Http que está en WCF REST Starter Kit Preview 2.

Aquí es cómo se podría utilizar:

var client = new HttpClient(); 
    client.DefaultHeaders.Authorization = new Credential("ArbitraryAuthHeader"); 
    client.DefaultHeaders.Date = DateTime.Now; 
    client.DefaultHeaders.Accept.Add("application/xml"); 

    var response = client.Get("http://example.org"); 

    var xmlString = response.Content.ReadAsString(); 
+0

incluso aquí no puedo configurar/cambiar el encabezado de la fecha. – Ajish

+0

¿Por qué no? ¿Le da un error? –

+0

Cuando trataba de una cabecera de set fecha, me estoy haciendo una excepción diciendo 'produjo una excepción durante una petición de cliente Web.'. Y lo intenté sin un encabezado de fecha, recibo un error 401 no autorizado como este 'El servidor remoto devolvió un error: (401) No autorizado.'. – Ajish

1

Existen varias formas de hacerlo, pero el uso de los objetos WebRequest es el más rápido si tiene pocas llamadas para completar.

This site, tiene una gran visión general del proceso.

+0

He intentado utilizar el mismo HttpWebRequest y HttpWebResponse clase para enviar solicitud y obtener la respuesta, respectivamente. Pero en este momento el problema es que no puedo agregar/configurar el encabezado FECHA de HttpWebRequest. Cuando intento establecer el encabezado DATE. Recibo una excepción que dice Este encabezado se debe modificar utilizando la propiedad correspondiente. Nombre del parámetro: nombre. He intentado buscar una solución para esto pero no voy ... ¿Hay algo que pueda hacer para establecer el encabezado DATE en HttpWebRequest – Ajish

+0

Parece que esto no va a funcionar. http://social.msdn.microsoft.com/Foros/en-US/netfxnetcom/thread/dba65027-3fb8-42ec-83e8-90bd77c42ca3/ Me gustaría ver el comentario de Darrel. –

+0

¿Cómo puedo cambiar/configurar el encabezado de fecha en .NET httpRequest? Cuando trato de cambiarlo, recibo un error. – Ajish

0

A pesar de su nombre algo engañoso, ADO.NET Data Services (que es parte de .NET 3.5) contiene API para exponer y consumir servicios basados ​​en REST. En su caso, puede ignorar de forma segura la parte que le permite exponer los servicios y concentrarse en la parte del cliente.

Es compatible con LINQ y todo tipo de bondad, lo que le permite consultar su servicio REST así:

var selectedOrders = from o in context.Orders 
        where o.Freight > 30 
        orderby o.ShippedDate descending 
        select o; 

Hay más de ello here. Pruébalo, he estado muy contento con él hasta ahora.

+3

El problema con el ejemplo que está dando es que solo puede hacer la consulta linq en los puntos finales del servicio de datos ADO.Net. No puede hacer eso contra otros puntos finales REST. El OP no podrá hacer esto contra sus API de Java. –

4

sólo para añadir un poco de valor a este hilo (yo también estaba buscando una manera de consumir un servicio REST y fácilmente proporcionar credenciales y encontré este Tema ... yo no tenía el requisito de "fecha"), Aaron Skonnard ha escrito un excelente artículo sobre el uso del kit de arranque WCF REST llamada:

A Developer's Guide to the WCF REST Starter Kit

Hay una sección muy informativo sobre cómo consumir un servicio RESTful usando HttpClient. Y aquí está el fragmento de código para hablar con Twitter:

HttpClient http = new HttpClient("http://twitter.com/statuses/"); 
http.TransportSettings.Credentials = 
    new NetworkCredential("{username}", "{password}"); 
HttpResponseMessage resp = http.Get("friends_timeline.xml"); 
resp.EnsureStatusIsSuccessful(); 
ProcessStatuses(resp.Content.ReadAsStream());