C# 在这种情况下,如何使用二进制文件发出Post请求?

C# 在这种情况下,如何使用二进制文件发出Post请求?,c#,postman,restsharp,C#,Postman,Restsharp,我有系统A(人们上传文件的Web界面)和系统B(文件归档系统) 步骤1)用户通过系统a提交文件 步骤2)系统A接收文件,并对其进行加密 步骤3)系统A通过调用系统B的端点()发送带有解密文件的Post请求 步骤4)系统B接收POST请求。然后归档文件 此时此刻,我陷入了第三步。我能够接收文件,但当系统a对文件发出Post请求时抛出异常 我正在尝试将csv文件发布到。然而,它回来了 你知道下面的代码有什么错误吗 string path = "THE PATH OF THE FIL

我有系统A(人们上传文件的Web界面)和系统B(文件归档系统)

步骤1)用户通过系统a提交文件

步骤2)系统A接收文件,并对其进行加密

步骤3)系统A通过调用系统B的端点()发送带有解密文件的Post请求

步骤4)系统B接收POST请求。然后归档文件

此时此刻,我陷入了第三步。我能够接收文件,但当系统a对文件发出Post请求时抛出异常

我正在尝试将csv文件发布到。然而,它回来了

你知道下面的代码有什么错误吗

string path = "THE PATH OF THE FILE";
byte[] file = System.IO.File.ReadAllBytes(path);
string filevalue = System.Convert.ToBase64String(file);

var client = new RestClient("http://127.0.0.1:8080/rest/bookstore/");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "text/csv");
request.AddParameter("text/csv", file , ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

您不需要重定向,只需:

public class BookstoreController : ApiController
{
     public void Get() => Download();
}

public static void Download()
{
     var client = new RestClient("...");
     var request = new RestRequest("...", Method.POST);
     var response = client.Execute(request);
     client.DownloadData(new RestRequest("/file", Method.GET)).SaveAs("filename.csv");
     
     Console.WriteLine("Output: ");
     Console.WriteLine(response.Content);
}

本质上,您可以使用方法内容下载文件。但是创建客户机和请求,然后执行响应,但将数据从请求下载到响应中。然后它将强制浏览器为用户下载文件。

您不需要重定向,只需:

public class BookstoreController : ApiController
{
     public void Get() => Download();
}

public static void Download()
{
     var client = new RestClient("...");
     var request = new RestRequest("...", Method.POST);
     var response = client.Execute(request);
     client.DownloadData(new RestRequest("/file", Method.GET)).SaveAs("filename.csv");
     
     Console.WriteLine("Output: ");
     Console.WriteLine(response.Content);
}

本质上,您可以使用方法内容下载文件。但是创建客户机和请求,然后执行响应,但将数据从请求下载到响应中。然后它会强制浏览器为用户下载文件。

今天我检查了系统日志。我发现了此消息(这意味着我的文件已存档)

信息11:15:01.938(FedoraLdp)获取资源“书店/cc51bc52-e59a-4e29-801a-e7d979326197”

所以我尝试提交Post请求并检查文件是否已存档。 最后发现该文件已归档,如系统日志所示。即使在Http Post响应中,它说我的请求不可接受


因此,我认为API端点没有返回正确的消息,也没有向我提供有关我发出的Http Post请求中缺少的内容的明确信息。

今天,我检查了系统日志。我发现了此消息(这意味着我的文件已存档)

信息11:15:01.938(FedoraLdp)获取资源“书店/cc51bc52-e59a-4e29-801a-e7d979326197”

所以我尝试提交Post请求并检查文件是否已存档。 最后发现该文件已归档,如系统日志所示。即使在Http Post响应中,它说我的请求不可接受


因此,我认为API端点没有返回正确的消息,也没有为我提供有关Http Post请求中缺少的内容的明确信息。

我有点困惑,您有一个
ValuesController
,它需要一个id,但您不使用该id,而是尝试重定向到另一个控制器以返回.csv?csv将以JSON或XML的形式返回-否则您只需下载文件,它就会在浏览器中返回。对不起,把你弄糊涂了。在我的情况下。控制器将从视图接收一个文件,并将其放置在一个文件夹中。然后我会将它重定向到我的另一个应用程序。我被困在提出发帖要求。我在《邮递员》中模拟了这个过程,没有问题。这就是为什么我怀疑我的代码中是否遗漏了什么。我有点困惑,您有一个
valuescocontroller
,它需要一个id,但您不使用它,而是尝试重定向到另一个控制器以返回.csv?csv将以JSON或XML的形式返回-否则您只需下载文件,它就会在浏览器中返回。对不起,把你弄糊涂了。在我的情况下。控制器将从视图接收一个文件,并将其放置在一个文件夹中。然后我会将它重定向到我的另一个应用程序。我被困在提出发帖要求。我在《邮递员》中模拟了这个过程,没有问题。这就是为什么我怀疑我的代码是否遗漏了什么。嗨,格雷格。谢谢你的解决方案。很好。我会告诉你更多关于流动的信息。我有系统A(人们上传文件的Web界面)和系统B(文件归档系统)。1) 用户通过系统a提交文件2)系统a接收文件,并对其进行加密3)系统a将通过调用系统B的端点发送带有解密文件的Post请求4)系统B接收Post请求。然后归档文件。此时此刻,我陷入了第三步。我能够接收文件,但是当系统a对文件发出Post请求时抛出异常。Hi Greg。我已经更新了我的代码。我想我没有清楚地说明我的问题。所以你不能存档到服务器,它失败了吗?上面到底写了什么?嗨,格雷格。非常感谢。我的问题解决了。我已经检查了系统Hi Greg谢谢你的解决方案。很好。我会告诉你更多关于流动的信息。我有系统A(人们上传文件的Web界面)和系统B(文件归档系统)。1) 用户通过系统a提交文件2)系统a接收文件,并对其进行加密3)系统a将通过调用系统B的端点发送带有解密文件的Post请求4)系统B接收Post请求。然后归档文件。此时此刻,我陷入了第三步。我能够接收文件,但是当系统a对文件发出Post请求时抛出异常。Hi Greg。我已经更新了我的代码。我想我没有清楚地说明我的问题。所以你不能存档到服务器,它失败了吗?上面到底写了什么?嗨,格雷格。非常感谢。我的问题解决了。我已经检查过系统了