繁体   English   中英

如何通过将 HttpClient 请求转换为 RestSharp 请求来上传文档?

[英]How do I upload document by converting HttpClient request to RestSharp request?

在我登录到我使用的 API 后,我正在尝试使用 RestSharp 上传文档。

我能够使用 Postman 做到这一点。 截图如下:

邮递员请求成功。

Postman 代码生成器为我生成此代码块:

var client = new RestClient("http://80.211.238.187/AcumaticaERP/entity/Default/17.200.001/StockItem/POSTMAN123/files/sample.pdf");
client.Timeout = -1;
var request = new RestRequest(Method.PUT);
request.AddHeader("Content-Type", "application/pdf");
request.AddParameter("application/pdf", "<file contents here>", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

但是 idk 如何编辑上面给定代码块中的 < file contents > 部分。

我还能够使用相应 API 文档指南中建议的 HttpClient 来实现它:

using (StreamReader sr = new StreamReader(@"C:\Users\fcomak\Downloads\sample.pdf"))
{
    _httpClient.PutAsync("http://80.211.238.187/AcumaticaERP/entity/Default/17.200.001/StockItem/POSTMAN123/files/sample.pdf", new StreamContent(sr.BaseStream))
        .Result
        .EnsureSuccessStatusCode();
}

但我需要将 HttpClient 请求转换为 RestSharp 请求。 我尝试使用 RestSharp 来实现这一点,但失败了。 即使我可以发送文件,其内容也无法正确浏览。 这是我尝试的代码块:

using (StreamReader sr = new StreamReader(@"C:\Users\fcomak\Downloads\sample.pdf"))
{
    restClient.Execute(new RestRequest("http://80.211.238.187/AcumaticaERP/entity/Default/17.200.001/StockItem/POSTMAN123/files/sample.pdf", Method.PUT)
        .AddHeader("Content-Type", "application/pdf")
        .AddParameter("application/pdf", new StreamContent(sr.BaseStream), ParameterType.RequestBody));
}

顺便说一句,我可以通过将此 api 与此restClient一起使用来发送或获取 json 内容。 当然我已经登录了。 我失败的原因是关于我的restClient。 如果有任何帮助,我将不胜感激。

我刚刚解决了这个问题。

using (WebClient wc = new WebClient())
{
    byte[] value = wc.DownloadData("http://www.africau.edu/images/default/sample.pdf");
    restClient.Execute(new RestRequest("http://80.211.238.187/AcumaticaERP/entity/Default/17.200.001/StockItem/POSTMAN123/files/sample.pdf", Method.PUT)
        .AddHeader("Content-Type", "application/pdf")
        .AddParameter("application/pdf", value, ParameterType.RequestBody)
        );
}

如您所见,我使用WebClient.DownloadData()而不是StreamReader.BaseStream()

或者,您可以使用File.ReadAllBytes()将本地数据转换为字节数组

string entitySource = @"C:\Users\fcomak\Downloads\sample2.pdf";
byte[] value = File.ReadAllBytes(entitySource);
restClient.Execute(new RestRequest(entityBasePath + entityName + "/" + inventoryID + "/files/" + fileName, Method.PUT)
        .AddHeader("Content-Type", "application/pdf")
        .AddParameter("application/pdf", value, ParameterType.RequestBody)
        );

供参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM