Un ficheiro binario debería chegar ao cliente HTTP como bytes. Leelo cun lector de texto e volver codificar a cadea resultante como ASCII pode substituír valores antes de que o proxy reciba nada. Que unha pequena mostra de texto funcione non fai que ese camiño sexa seguro para unha imaxe, un arquivo ou un documento.

Nun camiño de subida .NET existente, substitúe esa conversión por unha orixe de corpo binaria:

using var file = File.OpenRead(path);
using var content = new StreamContent(file);

Pasa o contido pola subida HTTP configurada da aplicación; o fragmento establece a orixe do corpo, mentres que o cliente existente segue encargándose do método, o destino, o proxy e a xestión do ciclo de vida.

Elimina calquera Content-Length calculado a partir do reconto de caracteres da cadea antiga. O campo mide octetos. Deixa que a biblioteca HTTP constrúa o enmarcado a partir da representación do corpo en lugar de emparellar un reconto de caracteres cun búfer codificado de forma diferente.

Para unha subida de texto intencionada, escolle a codificación explicitamente e deriva calquera lonxitude necesaria dos bytes enviados. Esa decisión de formato de texto non debería aplicarse a ficheiros arbitrarios.

Compara o artefacto transferido cun valor esperado de confianza. O éxito de HTTP confirma que unha operación de subida se completou nesa capa; non pode demostrar que unha conversión de texto previa conservase os bytes orixinais.

Artigos relacionados