C# 发送大型JSON文件(>;1 MB)时HttpClient.SendAsync抛出System.Net.Http.HttpRequestException
我有一个以RESTful方式在HTTP协议上工作的外部web服务。它可以接受相当大的JSON文档(从1MB到20-30MB),进行一些转换并返回另一个大的JSON文档,该文档的大小等于或不小于接受的JSON文档的大小 当通过邮递员进行测试时,它运行良好 我使用ASP.NET Core 2.2,并尝试使用C# 发送大型JSON文件(>;1 MB)时HttpClient.SendAsync抛出System.Net.Http.HttpRequestException,c#,json,asp.net-core,dotnet-httpclient,C#,Json,Asp.net Core,Dotnet Httpclient,我有一个以RESTful方式在HTTP协议上工作的外部web服务。它可以接受相当大的JSON文档(从1MB到20-30MB),进行一些转换并返回另一个大的JSON文档,该文档的大小等于或不小于接受的JSON文档的大小 当通过邮递员进行测试时,它运行良好 我使用ASP.NET Core 2.2,并尝试使用HttpClient执行相同的请求。我的应用程序接受数据,创建相同的JSON文档并将其发送到外部web服务 下面是我使用的代码: public async Task<TResponse>
HttpClient
执行相同的请求。我的应用程序接受数据,创建相同的JSON文档并将其发送到外部web服务
下面是我使用的代码:
public async Task<TResponse> MakeRequest<TRequest, TResponse>(TRequest request)
{
if (request == null)
throw new ArgumentNullException(nameof(TRequest));
var content = new StringContent(JsonConvert.SerializeObject(request));
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var httpRequestMessage = new HttpRequestMessage { Method = HttpMethod.Post, Content = content };
var response = await _httpClient.SendAsync(httpRequestMessage);
if (response.IsSuccessStatusCode)
{
string responseString = await response.Content.ReadAsStringAsync();
var responseObject = JsonConvert.DeserializeObject<TResponse>(responseString);
return (responseObject != null) ? responseObject : throw new InvalidOperationException();
}
throw new InvalidOperationException();
}
你知道是什么导致了这个问题吗
更新-异常.ToString()消息:
例外说明了什么?是400吗?500美元?它是否包含错误消息?如果服务器返回无效响应,它似乎无法处理大型JSON文件。再说一次,您确定没有收到错误页面而不是实际响应吗?尝试使用Fiddler或其他调试代理查看从server@PanagiotisKanavos,异常表示“服务器返回了无效或无法识别的响应”。@PanagiotisKanavos,服务器在使用Postman进行测试时返回了有效响应。HttpException包括状态代码,假设服务器返回了一个。异常的状态代码是什么?发布完整的异常文本,而不仅仅是消息。您可以使用
Exception.ToString()
获取全文。但是,如果服务器将您重定向到错误页面,则只有Fiddler会显示该页面
services.AddHttpClient<IExternalWebServiceProxy, ExternalWebServiceProxy>()
.ConfigureHttpClient(x =>
{
x.MaxResponseContentBufferSize = 1024 * 1000 * 100;
});
System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.IO.IOException: The server returned an invalid or unrecognized response.
at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at XXX.XXX.XXX.Internals.NCANodeProxy.MakeRequest[TRequest,TResponse](TRequest request) in D:\Sources\XXX\XXX\XXX.XXX.Core\Internals\ExternalNodeProxy.cs:line 36
at XXX.XXX.XXX.Services.CryptoService.SignFileDocument(SignFileCommand command) in D:\Sources\XXX\XXX\XXX.XXX.Core\Services\CryptoService.cs:line 134