Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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# 发送大型JSON文件(>;1 MB)时HttpClient.SendAsync抛出System.Net.Http.HttpRequestException_C#_Json_Asp.net Core_Dotnet Httpclient - Fatal编程技术网

C# 发送大型JSON文件(>;1 MB)时HttpClient.SendAsync抛出System.Net.Http.HttpRequestException

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>

我有一个以RESTful方式在HTTP协议上工作的外部web服务。它可以接受相当大的JSON文档(从1MB到20-30MB),进行一些转换并返回另一个大的JSON文档,该文档的大小等于或不小于接受的JSON文档的大小

当通过邮递员进行测试时,它运行良好

我使用ASP.NET Core 2.2,并尝试使用
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