微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 MultipartContent - IOException:无法从传输连接读取数据

如何解决使用 MultipartContent - IOException:无法从传输连接读取数据

当我使用 HttpClient 将表单数据发送到另一个 api 时收到此错误

Error:

我在另一个 api 控制器上有这个参数:

    public class IntegracaoArquivosDigitaisDto
    {

        /// <summary>
        /// IdInteral do arquivo digital
        /// </summary>
        /// <example>1</example>
        public int IdInternalArquivoDigital { get; set; }

        /// <summary>
        /// Chave do Módulo
        /// </summary>
        /// <example>
        /// RecursosHumanos
        /// </example>
        public string ChaveModulo { get; set; }

        /// <summary>
        /// Versão do Módulo
        /// </summary>
        /// <example>
        /// 1.6
        /// </example>
        public int? Versao { get; set; }

        /// <summary>
        /// Versão dos Dados enviados para processamento
        /// </summary>
        /// <example>
        /// c8283005-68f5-41bf-aea6-29496068656c
        /// </example>
        public Guid IdProcessamento { get; set; }

        /// <summary>
        /// Colunas chaves
        /// </summary>
        public List<PayloadDTO> ColunasChaves { get; set; }

        /// <summary>
        /// Tipo de operação - I,A,E
        /// </summary>
        /// <example>1</example>
        public string TipoOperacao { get; set; }

        /// <summary>
        /// Id arquivo Digital
        /// </summary>
        /// <example>1</example>
        public string IdArquivoDigital { get; set; }

        /// <summary>
        /// Nome Arquivo
        /// </summary>
        /// <example>teste.pdf</example>
        public string NomeArquivoDigital { get; set; }

        /// <summary>
        /// Arquivo
        /// </summary>
        public IFormFile Arquivo { get; set; }
    }


    public class PayloadDTO
    {

        /// <summary>
        /// Nome do campo
        /// </summary>
        /// <example>
        /// Cidade
        /// </example>
        public string Campo { get; set; }

        /// <summary>
        /// Valor representativo do campo
        /// </summary>
        /// <example>José da Silva</example>
        public string Valor { get; set; }

        /// <summary>
        /// Tipo do dado
        /// </summary>
        /// <example>int</example>
        public string Tipo { get; set; }

    }

我是控制器:

[HttpPost]
public async Task<IActionResult> Teste([FromForm] IntegracaoArquivosDigitaisDto dto)
{
    var json = JsonSerializer.Serialize(dto,new JsonSerializerOptions
    {
        WriteIndented = true,});

    return Ok(json);
}

我尝试使用 StringContent、Json、FormUrlEncodedContent 和 MultipartFormDataContent,但不起作用。

使用带有这些参数的 httpClient 发布表单数据的正确方法是什么?

这是我的实现测试:

  [HttpGet]
        public async Task<IActionResult> Get()
        {
            string url = "http://localhost:5001/teste";

            using (MultipartFormDataContent formDataContent = new MultipartFormDataContent())
            {
                var obj = new
                {
                    IdInternalArquivoDigital = 3,ChaveModulo = "RecursosHumanos",Versao = 3,IdProcessamento = Guid.NewGuid(),ColunasChaves = new List<PayloadDTO>{
                        new PayloadDTO{
                            Campo="CdCategoria",Tipo= "int",Valor= "32",},new PayloadDTO{
                            Campo="Id",Valor= "3",new PayloadDTO{
                            Campo="Nome",Tipo= "strig",Valor= "Samuel",TipoOperacao = "I",IdArquivoDigital = Guid.NewGuid().ToString(),NomeArquivoDigital = "a7x.jg",};

                var json = JsonSerializer.Serialize(obj,new JsonSerializerOptions { WriteIndented = true,});

                //json content
                // var jsonContent = new StringContent(json);

                // jsonContent.Headers.ContentType = new MediaTypeHeaderValue("application/json")
                // {
                //     CharSet = "utf-8"
                // };

                // Dictionary<string,string> dic = new Dictionary<string,string>();
                // dic.Add(nameof(IntegracaoArquivosDigitaisDto.Versao),obj.Versao.ToString());
                // dic.Add(nameof(IntegracaoArquivosDigitaisDto.IdArquivoDigital),obj.IdArquivoDigital.ToString());
                // dic.Add(nameof(IntegracaoArquivosDigitaisDto.IdInternalArquivoDigital),obj.IdInternalArquivoDigital.ToString());
                // dic.Add(nameof(IntegracaoArquivosDigitaisDto.IdProcessamento),obj.IdProcessamento.ToString());
                // dic.Add(nameof(IntegracaoArquivosDigitaisDto.ChaveModulo),obj.ChaveModulo);
                // dic.Add(nameof(IntegracaoArquivosDigitaisDto.NomeArquivoDigital),obj.NomeArquivoDigital);
                // dic.Add(nameof(IntegracaoArquivosDigitaisDto.TipoOperacao),obj.TipoOperacao);

                // formDataContent.Add(new FormUrlEncodedContent(dic),"dto");

                // formDataContent.Add(new StringContent(obj.Versao.ToString()),nameof(IntegracaoArquivosDigitaisDto.Versao));
                // formDataContent.Add(new StringContent(obj.IdArquivoDigital.ToString()),nameof(IntegracaoArquivosDigitaisDto.IdArquivoDigital));
                // formDataContent.Add(new StringContent(obj.IdInternalArquivoDigital.ToString()),nameof(IntegracaoArquivosDigitaisDto.IdInternalArquivoDigital));
                // formDataContent.Add(new StringContent(obj.IdProcessamento.ToString()),nameof(IntegracaoArquivosDigitaisDto.IdProcessamento));
                // formDataContent.Add(new StringContent(obj.NomeArquivoDigital),nameof(IntegracaoArquivosDigitaisDto.NomeArquivoDigital));
                // formDataContent.Add(new StringContent(obj.TipoOperacao),nameof(IntegracaoArquivosDigitaisDto.TipoOperacao));
                // formDataContent.Add(new StringContent(obj.ColunasChaves.ToString()),nameof(IntegracaoArquivosDigitaisDto.ColunasChaves));
                // formDataContent.Add(new StringContent(obj.ChaveModulo),nameof(IntegracaoArquivosDigitaisDto.ChaveModulo));
                formDataContent.Add(new MultipartFormDataContent(obj.ChaveModulo),nameof(IntegracaoArquivosDigitaisDto.ChaveModulo));

                string caminhoArquivo = @"C:\Users\samue\OneDrive\Imagens\a7x.jpg";
                using (var fileStream = new FileStream(caminhoArquivo,FileMode.Open))
                {
                    try
                    {
                        using (MemoryStream ms = new MemoryStream())
                        {
                            await fileStream.copyToAsync(ms);
                            var bytes = ms.ToArray();
                            var fileContent = new ByteArrayContent(bytes);
                            //file content
                            // fileContent.Headers.Contentdisposition = new ContentdispositionHeaderValue("form-data")
                            // {
                            //     FileName = "a7x.jpg"
                            //         .Replace("(",string.Empty)
                            //         .Replace(")",string.Empty)
                            //         .Replace(" ",string.Empty),//     Name = "arquivo",// };

                            formDataContent.Add(fileContent,nameof(IntegracaoArquivosDigitaisDto.Arquivo),"a7x.jpg");

                            _client.Timeout = TimeSpan.FromMinutes(2);

                            var res = await _client.PostAsync(url,formDataContent);

                            res.EnsureSuccessstatusCode();
                        }
                    }
                    catch (System.Exception ex) when (ex is HttpRequestException || ex is OperationCanceledException)
                    {

                        throw;
                    }

                }

            }

            return Ok();
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?