使用HttpRequestMessage或Stream上传REST文件?

Rem*_*emy 13 c# asp.net wcf

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

从WCF Web API文档

[WebInvoke(UriTemplate = "thumbnail", Method = "POST")]
public HttpResponseMessage UploadFile(HttpRequestMessage request)
{
Run Code Online (Sandbox Code Playgroud)

来自多个论坛帖子:
带有其他参数的WCF REST文件上传

[WebGet(UriTemplate="", Method ="POST"]
public string UploadFile(Stream fileContents)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

}
Run Code Online (Sandbox Code Playgroud)

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


小智 2

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

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