¿Un ActionResult personalizado para una respuesta http de varias partes?
-
06-07-2019 - |
Pregunta
Me gustaría responder a una solicitud http con un archivo txt y una página html. De esta manera, el cliente puede guardar el archivo y ver un resumen del contenido de ese archivo a través de una página html.
Dado que el archivo se genera sobre la marcha, tengo que usar la administración de estado en el servidor para generar el resumen en la segunda solicitud. Me gustaría evitar esto y resumirlo en una sola respuesta.
¿Cómo se vería el ActionResult personalizado?
Solución
Esto fue también discutido aquí en SO .
lo respondí así:
No, archivos adjuntos multiparte para descarga (como en el correo electrónico) no compatible por razones de seguridad. Sus llamado una descarga "drive-by".
Tenga en cuenta que Gmail maneja esto mediante comprimiendo dinámicamente los archivos. usted debería también http://forums.asp.net/t/1240811.aspx
No creo que ningún navegador moderno admita multiparte / mixto.
Otros consejos
Puede enviar XML con referencia a una hoja de estilo XSLT. El navegador puede realizar la transformación y mostrar una salida HTML resultante.
Y el usuario puede simplemente hacer " Archivo- > Guardar como ... " para almacenar el archivo XML.
¿Por qué no presentar el resumen como Vista HTML normal y proporcionar un enlace debajo de ese resumen que apunta a un ActionResult separado que devuelve datos binarios ...
public ActionResult SendFile(int id)
{
File file = FileRepository.GetFile(id);
byte[] fileData = file.FileData.ToArray();
return File(fileData, file.FileMimeType, file.FileName);
}
Hice una búsqueda sobre este tema y para mi sorpresa, parece que la gente ya lo hizo. Encontré una descripción aquí , pero no proporciona un público prueba URI, por lo que no pude probar el comportamiento del navegador en esto. También menciona la solución para enviar un archivo al cliente. Pero supongo que eso no es lo que estás buscando, ¿verdad?
Aquí hay otro artículo que muestra un ejemplo con multiparte respuestas Lamentablemente, el URI de demostración parece que ya no funciona.
Entonces, la situación es la siguiente: se pueden hacer respuestas de múltiples partes HTTP. Hay bibliotecas cliente (pocas) para manejar aquellas en el código de la aplicación. Se debe probar el comportamiento del navegador ( Aquí hay una voz ). El uso de esta función parece experimental y puede recomendarse solo usted puede controlar ambos extremos de la comunicación para eliminar problemas de interoperabilidad.