Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

303
Visualizações
Byte de transferencia de MVC o Web API [] el enfoque más eficiente

Después de lograr una implementación exitosa de ajax POST , cargando objetos modelo e incluso objetos complejos gracias a esta buena publicación , el nuevo objetivo es tener una implementación para escenarios aún un poco más complicados.

He intentado implementar la tarea en cuestión a través de ejemplos de código buscando en Google sin una respuesta concreta y correcta.

El objetivo es tener una transferencia de datos multipropósito (tipo de datos múltiples) del lado del cliente al servidor (sin usar un formulario o HttpRequestBase ) pasando una matriz de bytes sin formato de la manera más eficiente (sé que es posible implementar un nuevo protocolo HTTP/2 o googles Protocol Buffers: formato de intercambio de datos de Google

 [HttpPost] public JsonResult UploadFiles(byte[] parUploadBytearry) { }

preferiblemente un modelo cuyas propiedades sean un byte[]

 [HttpPost] public [JsonResult / ActionResult] Upload(SomeClassWithByteArray parDataModel) { }

La firma de la publicación ajax http:

 Log("AajaxNoPostBack preparing post-> " + targetUrl); $.ajax({ type: 'POST', url: targetUrl, data: mods, contentType: "application/json; charset=utf-8", dataType: "json", success: function for Success.. });

También probé desesperadamente esta solución

 public JsonResult UploadFiles(object parUploadBytearry) { if (parUploadBytearry== null) return null; System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); var pathtosSave = System.IO.Path.Combine(Server.MapPath("~/Content/uploaded"), "Test11.png"); using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { bf.Serialize(ms, parUploadFiles); var Barr = ms.ToArray(); var s = new System.Web.Utils.FileFromBar(pathtosSave, BR); } }

como publicó y recibió datos hasta guardar los datos ( .png ) con éxito en un archivo en el sistema, los datos no eran legítimos.

Y el último intento sensato antes del intento de objeto a matriz de bytes fue este ejemplo de código msdn 1

¿Cuál es la forma correcta de pasar una matriz de bytes que C# entenderá?

(en el caso de documentos raw byte[] o archivos como imágenes png )

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

¿Cuál es la forma correcta de pasar una matriz de bytes?

La forma más sencilla de leer un byte[] de WebAPI sin escribir MediaTypeFormatter personalizado para "aplicación/flujo de octetos" es simplemente leerlo manualmente desde el flujo de solicitud:

 [HttpPost] public async Task<JsonResult> UploadFiles() { byte[] bytes = await Request.Content.ReadAsByteArrayAsync(); }

En otra publicación , describí cómo utilizar el formateador incorporado para BSON (JSON binario) que existe en WebAPI 2.1.

Si desea leer y escribir un BinaryMediaTypeFormatter que responda "aplicación/flujo de octetos", una implementación ingenua se vería así:

 public class BinaryMediaTypeFormatter : MediaTypeFormatter { private static readonly Type supportedType = typeof(byte[]); public BinaryMediaTypeFormatter() { SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/octet-stream")); } public override bool CanReadType(Type type) { return type == supportedType; } public override bool CanWriteType(Type type) { return type == supportedType; } public override async Task<object> ReadFromStreamAsync(Type type, Stream stream, HttpContent content, IFormatterLogger formatterLogger) { using (var memoryStream = new MemoryStream()) { await stream.CopyToAsync(memoryStream); return memoryStream.ToArray(); } } public override Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContent content, TransportContext transportContext) { if (value == null) throw new ArgumentNullException("value"); if (!type.IsSerializable) throw new SerializationException( $"Type {type} is not marked as serializable"); var binaryFormatter = new BinaryFormatter(); binaryFormatter.Serialize(stream, value); return Task.FromResult(true); } }
over 4 years ago · Santiago Trujillo Relatório

0

La respuesta es verdadera, pero estoy usando asp.net mvc en Visual Studio 2019 y parece que no hay ninguna definición para Request.Content , y este es el error:

'HttpRequest' no contiene una definición para 'Contenido' y no se pudo encontrar ningún método de extensión accesible 'Contenido' que acepte un primer argumento del tipo 'HttpRequest'.

Luego utilicé este enfoque y funciona para mí:

 Request.InputStream.Position = 0; List<byte> bytelist = new List<byte> { }; while (Request.InputStream.Position != Request.InputStream.Length) { bytelist.Add((byte)Request.InputStream.ReadByte()); }

Espero que sea útil والله اعلم

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda