我有个问题。我在一台机器上创建了一个API,它接收请求并将它们发送给用户签名(必须这样做)。它通过邮递员工作得很好:
标题:
但是,当我试图连接一个客户端(在我的示例中是一个默认控制台应用程序)时,我得到了400个状态代码响应:
StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
Transfer-Encoding: chunked
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Fri, 04 Mar 2022 12:48:43 GMT
Content-Type: application/problem+json; charset=utf-8
}
进行调用的代码是:
static async void SendPDFToEsign2()
{
var fileInfo = new FileInfo(@"C:\Users\Raul\Documents\PDFReadTest\Test.pdf");
var participantSSN = "14812149181";
var postContent = new MultipartFormDataContent();
var fileContent = new StreamContent(new FileStream(fileInfo.FullName, FileMode.Open));
fileContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/pdf");
postContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue("multipart/form-data");
postContent.Add(fileContent, "receivedPdf");
postContent.Add(new StringContent(participantSSN), "signerID");
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("multipart/form-data"));
client.BaseAddress = new Uri("https://esign.testapp.uib.no");
var result = client.PostAsync("/api/", postContent).Result;
Console.WriteLine(result);
}
我已经尝试了很多我找到的解决方案,也用过。
using (var client = new HttpClient())
{
using (var fs = File.OpenRead(pathtofile))
{
//code to send it
}
}
但在这种情况下似乎什么都不起作用?如果您认为这很重要,那么被调用的API看起来像这,但是它通过postman正常工作,所以我只想通过c#重新创建postman调用,这样我就可以开始将它集成到主系统中。
->编辑<--
设法得到了这样的200 OK响应:
var url = new Uri("https://esign.testapp.uib.no");
var participantSSN = "14812149181";
var fileInfo = new FileInfo(@"C:\Users\Raul\Documents\PDFReadTest\Test.pdf");
using var client = new HttpClient();
using var content = new ByteArrayContent(File.ReadAllBytes(fileInfo.FullName));
var postContent = new MultipartFormDataContent();
postContent.Add(content, "receivedPdf", "Test.pdf");
postContent.Add(new StringContent(participantSSN), "signerID");
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf");
var requestUri = "/api/";
client.BaseAddress = url;
var result = client.PostAsync(requestUri, postContent).Result;
Console.WriteLine(result);
Console.WriteLine($"Response : {result.StatusCode}");
但是我无法得到我需要的JSON响应(如上面的Postman图片所示)。我只能得到这个:
知道怎么才能得到邮递员给我的好答复吗?
->编辑2:修正<
public static async Task<HttpResponseMessage> PostPDF(System.IO.FileStream fsPDF, Participant participant)
{
// setup
using var client = new HttpClient();
var url = new Uri("https://esign.testapp.uib.no");
using var fileContent = new StreamContent(fsPDF);
fileContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf");
var requestUri = "/api/";
client.BaseAddress = url;
// add auth token
//var _bearerToken = "";
//client.DefaultRequestHeaders.Add("Authorization", "Bearer " + _bearerToken);
// setup request data
MultipartFormDataContent httpContent = new MultipartFormDataContent();
httpContent.Add(fileContent, "receivedPdf", "Test4.pdf"); // Hardcoded Name Test4
httpContent.Add(new StringContent(participant.SocialSecurityNo), "signerID");
// make the call
var response = client.PostAsync(requestUri, httpContent);
// return the response. perhaps save it in the DB too
return response.Result;
}
希望这能帮到别人!
发布于 2022-03-08 14:15:41
检查最后一次编辑,我自己就这样修改了。评论这一点,这样我就可以把这个问题标为已解决了。
发布于 2022-03-04 13:37:52
密码似乎是合理的。
看起来,如果文件是空的或太大,API将返回一个400。我敢打赌,您已经检查过它是否大于5MB,所以我猜该文件并没有被实际读取,而是发送了0字节的PDF。
通过检查内容,你是否检查了实际发布的内容?
https://stackoverflow.com/questions/71351859
复制相似问题