使用HttpRequestMessage或Stream上传REST文件?

时间:2012-02-15 08:54:57

标签: c# asp.net wcf

为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)

2 个答案:

答案 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请求并构建响应。如果您只需要接受来自客户端的流,那么从实现的角度来看,第二个选项就更简单了(在引擎盖下,它完成的工作与第一个方法相同)

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