2012-02-15 44 views
12

¿Cuál es la mejor manera de cargar un archivo para un cliente REST?¿Subir archivo REST con HttpRequestMessage o Stream?

A partir de la documentación de la API Web WCF

[WebInvoke(UriTemplate = "thumbnail", Method = "POST")] 
public HttpResponseMessage UploadFile(HttpRequestMessage request) 
{ 

De múltiples mensajes en el foro:
WCF REST File upload with additional parameters

[WebGet(UriTemplate="", Method ="POST"] 
public string UploadFile(Stream fileContents) 

entiendo, que el primer método permite publicar directamente un archivo de un formulario HTML normales . El segundo enfoque parece más común en todas las publicaciones del foro que encuentro.

¿Qué recomendarías y por qué? La API REST debe ser accesible desde todo tipo de idiomas y plataformas.

Para el enfoque HttpRequestMessage, ¿cómo podría hacer una carga de un archivo preferible con WCF HttpClient? Con FormUrlEncodedMediaTypeFormatter)

Respuesta

2

El primer método es "más cercano al metal" y sería más flexible ya que usted estaría procesando las solicitudes http y creando las respuestas usted mismo. Si todo lo que necesita hacer es aceptar un flujo de un cliente, la segunda opción es mucho más simple desde el punto de vista de implementación (bajo el capó, hace el mismo trabajo que el primer método)

No tengo una respuesta para tu última pregunta.

12

Con el fin de probar el enfoque HttpRequestMessage he hecho lo siguiente usando MVC:

vista
public class TestingController : Controller 
{ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Upload() 
    { 
     var file = Request.Files[0]; 
     var filename = Request.Form["filename"]; 
     var uri = string.Format("http://yoururl/serviceRoute/{0}", filename); 
     var client = new HttpClient(); 
     client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("image/pjpeg")); 
     var content = new StreamContent(file.InputStream); 
     var response = client.PostAsync(uri, content); 
     ViewBag.ServerUri = uri; 
     ViewBag.StatusCode = response.Result.StatusCode.ToString(); 
     return View(); 
    } 

} 

El índice debe tener una forma en la que que los puestos de vuelta al método de carga. Luego puede usar HttpClient para establecer una conexión con su servicio REST.

+0

Gracias Jed, desafortunadamente solo puedo elegir una respuesta correcta y ya se lo di a JCaffeine. Pero hizo una votación positiva. – Remy

+0

Remy, de nada y sin preocupaciones. Me alegra que te haya ayudado. – Jed

Cuestiones relacionadas