使用HttpRequestMessage或Stream上传REST文件?

上传REST客户端文件的更好方法是什么?

从WCF Web API文档

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

来自多个论坛post:
带有其他参数的WCF REST文件上载

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

我理解,第一种方法允许直接从普通的HTML表单发布文件。 在我发现的所有论坛post中,第二种方法似乎更常见。

你会推荐什么?为什么? 可以从各种语言和平台访问REST API。

对于HttpRequestMessage方法,如何使用WCF HttpClient上传文件? 使用FormUrlEncodedMediaTypeFormatter)

第一种方法是“更接近金属”并且更灵活,因为您将处理http请求并自己构建响应。 如果您只需要接受来自客户端的流,那么从实现角度来看,第二个选项就更简单了(在第一个方法执行的工作中,它完成的工作相同)

我对你的上一个问题没有答案。

为了测试HttpRequestMessage方法,我使用MVC完成了以下操作:

 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(); } } 

索引视图中应该有一个表单,用于回发到Upload方法。 然后,您就可以使用HttpClient建立与REST服务的连接。