Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发送带有RestClient请求的文件_C#_Asp.net Core_Stream_Postman - Fatal编程技术网

C# 发送带有RestClient请求的文件

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

我在.NETCore中有一个服务,它将一个文件作为参数。我想将此文件中的数据发送到Api。下面的代码是邮递员为我的请求自动生成的代码。在'attachmentRequest.AddFile(“file”,file);'行,文件是邮递员上载文件的本地路径的字符串。将我的文件作为已发送的文件发送的最佳方式是什么?我是否使用流并将文件保存到.Net Core中的某个位置并传递该地址

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