C# 发送带有RestClient请求的文件
我在.NETCore中有一个服务,它将一个文件作为参数。我想将此文件中的数据发送到Api。下面的代码是邮递员为我的请求自动生成的代码。在'attachmentRequest.AddFile(“file”,file);'行,文件是邮递员上载文件的本地路径的字符串。将我的文件作为已发送的文件发送的最佳方式是什么?我是否使用流并将文件保存到.Net Core中的某个位置并传递该地址C# 发送带有RestClient请求的文件,c#,asp.net-core,stream,postman,C#,Asp.net Core,Stream,Postman,我在.NETCore中有一个服务,它将一个文件作为参数。我想将此文件中的数据发送到Api。下面的代码是邮递员为我的请求自动生成的代码。在'attachmentRequest.AddFile(“file”,file);'行,文件是邮递员上载文件的本地路径的字符串。将我的文件作为已发送的文件发送的最佳方式是什么?我是否使用流并将文件保存到.Net Core中的某个位置并传递该地址 public async Task<bool> PostIssue(IFormFile
public async Task<bool> PostIssue(IFormFile file)
{
var client = new RestClient("https://sample/10000/attachments");
client.Timeout = -1;
var attachmentRequest = new RestRequest(Method.POST);
attachmentRequest.AddHeader("X-Atlassian-Token", "no-check");
attachmentRequest.AddHeader("Authorization", "Basic xxxxxxxxxxxxxx=");
attachmentRequest.AddHeader("Cookie", "atlassian.xsrf.token=xxxxxxxxxxxxxxxxxx_lin");
attachmentRequest.AddFile("file", file);
IRestResponse attachmentResponse = client.Execute(attachmentRequest);
Console.WriteLine(attachmentResponse.Content);
if (attachmentResponse.IsSuccessful)
{
return true;
}
else
{
return false;
}
}
公共异步任务发布(IFormFile)
{
var client=新的RestClient(“https://sample/10000/attachments");
client.Timeout=-1;
var attachmentRequest=新的重新请求(Method.POST);
attachmentRequest.AddHeader(“X-Atlassian-Token”,“无支票”);
attachmentRequest.AddHeader(“授权”,“基本XXXXXXXXXXXXX=”);
attachmentRequest.AddHeader(“Cookie”,“atlassian.xsrf.token=XXXXXXXXXXXXXXXXXXXX”;
AddFile(“文件”,文件);
IRestResponse attachmentResponse=client.Execute(attachmentRequest);
Console.WriteLine(attachmentResponse.Content);
如果(附件响应。发布成功)
{
返回true;
}
其他的
{
返回false;
}
}
您使用第二种方法AddFile
:
public IRestRequest AddFile (string name, byte [] bytes, string fileName, string contentType = null);
将IFormFile文件转换为字节数组
格式,而不是获取传输文件的路径
您所说的是使用流上传到本地确实是可能的,但这是一个额外的操作,您可以直接将文件操作成字节形式并传输到API,如下所示:
public async Task<bool> PostIssue(IFormFile file)
{
var client = new RestClient("http://localhost:50855/Users");
client.Timeout = -1;
var attachmentRequest = new RestRequest(Method.POST);
attachmentRequest.AddHeader("X-Atlassian-Token", "no-check");
attachmentRequest.AddHeader("Authorization", "Basic xxxxxxxxxxxxxx=");
attachmentRequest.AddHeader("Cookie", "atlassian.xsrf.token=xxxxxxxxxxxxxxxxxx_lin");
using (var ms = new MemoryStream())
{
file.CopyTo(ms);
var fileBytes = ms.ToArray();
attachmentRequest.AddFile("filename",fileBytes, file.FileName);
}
IRestResponse attachmentResponse = client.Execute(attachmentRequest);
Console.WriteLine(attachmentResponse.Content);
if (attachmentResponse.IsSuccessful)
{
return true;
}
else
{
return false;
}
}
公共异步任务发布(IFormFile)
{
var client=新的RestClient(“http://localhost:50855/Users");
client.Timeout=-1;
var attachmentRequest=新的重新请求(Method.POST);
attachmentRequest.AddHeader(“X-Atlassian-Token”,“无支票”);
attachmentRequest.AddHeader(“授权”,“基本XXXXXXXXXXXXX=”);
attachmentRequest.AddHeader(“Cookie”,“atlassian.xsrf.token=XXXXXXXXXXXXXXXXXXXX”;
使用(var ms=new MemoryStream())
{
CopyTo文件(ms);
var fileBytes=ms.ToArray();
attachmentRequest.AddFile(“文件名”,fileBytes,file.filename);
}
IRestResponse attachmentResponse=client.Execute(attachmentRequest);
Console.WriteLine(attachmentResponse.Content);
如果(附件响应。发布成功)
{
返回true;
}
其他的
{
返回false;
}
}
Api:
公共异步任务附件()
{
var file=Request.Form.Files[“filename”];//获取文件
//做你想做的事
返回Ok();
}
以下是测试结果:
答案非常清楚,我没有意识到.AddFile()有一个重载,它使用字节数组而不是URL。非常感谢。
public async Task<IActionResult> attachments()
{
var file = Request.Form.Files["filename"]; //get the file
//do something you want
return Ok();
}