Unexpected end of Stream, the content may have already been read by another component.

05/04/2019

0

Tenho uma API em .net core e estou com problemas para enviar um formulário com um anexo para o serviço.
Recebo o seguinte erro: 'Unexpected end of Stream, the content may have already been read by another component. '
Código da API:

namespace SISQUEST.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
[EnableCors(origins: "http://localhost:4200", headers: "*", methods: "*")]
public class PostController : ControllerBase
{

HttpClient _httpClient = new HttpClient();

public PostController()
{
_httpClient.BaseAddress = new Uri("http://localhost:51102/api/");
//_httpClient.DefaultRequestHeaders.Accept.Add(
// new MediaTypeWithQualityHeaderValue("application/json"));
}

[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[DisableFormValueModelBinding]
public async Task<ActionResult<QuestionarioModel>> CadastrarQuestionario([FromForm]QuestionarioModel questionarioModel)
{

string textMessage = String.Empty;
_httpClient.Timeout = TimeSpan.FromMinutes(20);
var httpClient = new HttpClient();

try
{

var myContent = JsonConvert.SerializeObject(questionarioModel);
var buffer = System.Text.Encoding.UTF8.GetBytes(myContent);
var byteContent = new ByteArrayContent(buffer);

string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
byteContent.Headers.Remove("Content-Type");
byteContent.Headers.Add("Content-Type", "Multipart/form-data;boundary=" + boundary);

var response = await httpClient.PostAsync(_httpClient.BaseAddress + "CadastrarQuestionario", byteContent );
if (response.Content != null)
{
textMessage = await response.Content.ReadAsStringAsync();
return Ok(textMessage);
}

httpClient.Dispose();

}
catch (Exception e)
{
return BadRequest(e);
}

return Ok(textMessage);

}
}
}

Código do Serviço

[HttpPost]
public ActionResult CadastrarQuestionario()
{
var valido = true;
SubGrupoQuestionario subGrupo = new SubGrupoQuestionario();
List<SubGrupoQuestionario> SubGrupoValido = new List<SubGrupoQuestionario>();
Questionario questionario = new Questionario();
QuestionarioSubGrupo associacaoQuestionario = new QuestionarioSubGrupo();
IFormCollection nvc = HttpContext.Request.Form; //erro ocorre aqui
try
{
questionario.QstNom = nvc["nomeQuest"];
questionario.QstAtvSit = bool.Parse(nvc["situacaoQuest"]);
questionario.QstIclDat = DateTime.Now;
questionario.QstDisSit = true;
if (HttpContext.Request.Form.Files.Count == 0)
{
if (string.IsNullOrEmpty(questionario.QstNom) || questionario.QstNom.Trim() == "")
{
return BadRequest("É obrigatório criar um nome ou anexar uma imagem para a criação do questionário.");
}
else
{
var nome = _contextSisquest.Questionario.ToList();


foreach (var item in nome)
{
if (item.QstNom != null)
{
var nomeCadastrado = item.QstNom.Replace(" ", "").Trim();
var novoNome = questionario.QstNom.Replace(" ", "").Trim();

if (String.Compare(nomeCadastrado, novoNome, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase) == 0)
{
return BadRequest("Já existe um questionário com o mesmo nome.");
}
}
}
}
}
if (nvc["subGrupoQuest"] != "")
{
associacaoQuestionario.QstSboCod = short.Parse(nvc["subGrupoQuest"]);
}
associacaoQuestionario.QstGrpCod = short.Parse(nvc["grupoQuest"]);

string folderName = "Upload/Sisquest";
string webRootPath = _hostingEnvironment.WebRootPath;
string newPath = Path.Combine(webRootPath, folderName);

if (!Directory.Exists(newPath))
{
Directory.CreateDirectory(newPath);
}

List<QuestionarioAnexo> anexoQuest = new List<QuestionarioAnexo>();

for (int i = 0; i < HttpContext.Request.Form.Files.Count; i++)
{
string fileName = DateTime.Now.Ticks.ToString() + Path.GetExtension(ContentDispositionHeaderValue.Parse(HttpContext.Request.Form.Files[i].ContentDisposition).FileName.Trim('"'));
string extensao = Path.GetExtension(fileName);
string[] extensoesValidas = new string[] { ".jpeg", ".png", ".JPEG", ".PNG" };
if (HttpContext.Request.Form.Files[i].Length > 2097152)
{
valido = false;
return BadRequest("Tamanho máximo permitido para anexo é de 2MB");
}
else
{
if (!extensoesValidas.Contains(extensao))
{
valido = false;
return BadRequest("Extensão de arquivo não suportada");
}
else
{
string fullPath = Path.Combine(newPath, fileName);
using (var s = new FileStream(fullPath, FileMode.Create))
{
HttpContext.Request.Form.Files[i].CopyTo(s);
QuestionarioAnexo anx = new QuestionarioAnexo();

anx.QstAnxNom = fileName;
anx.QstAnxOrdNum = (byte)(i + 1);
anexoQuest.Add(anx);
}
}
}
}

if (valido == true)
{
if (associacaoQuestionario.QstSboCod != null)
{
SubGrupoValido = _contextSisquest.SubGrupoQuestionario.Where(x => x.QstGrpCod == associacaoQuestionario.QstGrpCod).ToList();
if (SubGrupoValido.Count > 0)
{
SubGrupoQuestionario sub = new SubGrupoQuestionario();
sub = _contextSisquest.SubGrupoQuestionario.Where(x => x.QstSboCod == associacaoQuestionario.QstSboCod).FirstOrDefault();
if (!SubGrupoValido.Contains(sub))
{
return BadRequest("SubGrupo não pertence a este Grupo");
}
else
{
_questionario.InsertQuestionario(questionario, associacaoQuestionario, anexoQuest);
}
}
else
{
return BadRequest("SubGrupo não pertence a este Grupo");}


Não pude colar todo o Código.
Thiago Romão

Thiago Romão

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar