为REST客户端上传文件的更好方法是什么?
来自WCF Web API文档
[WebInvoke(UriTemplate = "thumbnail", Method = "POST")]
public HttpResponseMessage UploadFile(HttpRequestMessage request)
{
来自多个论坛帖子:
WCF REST File upload with additional parameters
[WebGet(UriTemplate="", Method ="POST"]
public string UploadFile(Stream fileContents)
据我所知,第一种方法允许直接从普通的HTML表单发布文件。在我发现的所有论坛帖子中,第二种方法似乎更常见。
你会推荐什么?为什么?可以从各种语言和平台访问REST API。
对于HttpRequestMessage方法,如何使用WCF HttpClient上传文件?使用FormUrlEncodedMediaTypeFormatter)
答案 0 :(得分:14)
为了测试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服务的连接。
答案 1 :(得分:2)
第一种方法是“更接近金属”并且更灵活,因为您将自己处理http请求并构建响应。如果您只需要接受来自客户端的流,那么从实现的角度来看,第二个选项就更简单了(在引擎盖下,它完成的工作与第一个方法相同)
我对你的上一个问题没有答案。