FeaturedNOTICIAS

Sirva archivos dinámicos con Blazor en ASP.NET – CloudSavvy IT


Una de las muchas características excelentes de marcos como Blazor y ASP.NET (en los que se ejecuta) es la capacidad de ofrecer contenido dinámico a cualquier punto final que necesite su aplicación. Si desea servir descargas de archivos generados, esto es fácil de hacer con un poco de configuración.

¿Por qué servir archivos dinámicos?

Básicamente, tiene dos opciones como servidor web: responder a una solicitud con contenido estático, como una página HTML o un archivo JPG, o generar una respuesta personalizada para enviarla al usuario. Blazor se ejecuta en ASP.NET, por lo que el servidor HTTP integrado admite una amplia gama de opciones y permite una gran flexibilidad.

Por ejemplo, tal vez desee alojar un archivo JSON en /images/pathname.json. No es necesario que sea un archivo literal de disco; el servidor puede interpretar esta solicitud y responder con cualquier tipo de contenido, incluido algo inesperado como un archivo PNG. Puede responder a esta solicitud recuperando algunos resultados de una API, creando una respuesta y enviando la cadena al usuario.

O tal vez desee generar el archivo real sobre la marcha. Por ejemplo, existen muchas bibliotecas de gráficos que se utilizan para diseñar imágenes personalizadas. Puede usar uno de estos para generar una imagen y responder a la solicitud del usuario con los datos, todo en la memoria.

En el último caso, puede tener sentido almacenar en caché la respuesta guardándola en el disco y respondiendo con un archivo real la mayor parte del tiempo. Esto puede resultar útil para las generaciones de archivos que consumen muchos recursos y que no cambian con tanta frecuencia.

Configurarlo

El servicio de archivos como este está integrado y es bastante sencillo de hacer. Deberá crear una nueva página de Razor, que es en la que se ejecuta Blazor. Puede hacerlo haciendo clic con el botón derecho en Visual Studio y seleccionando Agregar> Página de Razor.

Esto crea dos archivos vinculados entre sí en la jerarquía: Name.cshtml, que maneja el lado HTML de las cosas, y Name.cshtml.cs, que gestiona el modelo y el código reales. Dado que esta no será una página web real, solo un archivo, puede ignorar la primera en su mayor parte.

Aún necesitará configurar el @page atributo para que coincida con el lugar donde desea que se aloje este archivo. Probablemente desee incluir algunos caracteres comodín, lo que hace con paréntesis.

En Name.cshtml.cs archivo, verá una extensión del código real PageModel. La función principal aquí es OnGet(), que probablemente querrá cambiar a OnGetAsync() si está realizando un procesamiento asincrónico.

Tiene tres opciones principales de esta función. Primero, devuelve un PhysicalFile, que literalmente lee un archivo de disco dada una ruta y lo envía al usuario con un tipo, opcionalmente con un nombre de descarga separado de la ruta real.

Si bien es probable que esté aquí para generar algo dinámicamente, esto puede ser muy útil para el almacenamiento en caché. Si su función de procesamiento guarda el resultado en un archivo, puede verificar si ese archivo existe antes de procesarlo nuevamente, y si es así, simplemente devuelva la respuesta almacenada en caché.

La siguiente opción es devolver un archivo virtual, dada una matriz de bytes. Esto es lo que querrá usar para la mayoría de las aplicaciones, ya que funciona completamente en la memoria y debería ser muy rápido.

Dependiendo de la codificación que esté intentando usar, es posible que desee convertir una cadena en una matriz de bytes utilizando la Encoding clase de ayudante.

Encoding.UTF8.GetBytes(string);

Finalmente, puede devolver una cadena de contenido directamente, que es lo que debe usar si desea mostrar el contenido al usuario en lugar de activar una descarga en su navegador.

Hay otras opciones además de estas tres, pero el resto implica responder con códigos de estado, redireccionar, respuestas no autorizadas y renderizar la página en sí.

Procesamiento de archivos en base a rutas y parámetros

Por supuesto, nada de esto es útil si no puede responder a las solicitudes basadas en la entrada del usuario. Las dos formas de entrada están en la URL: parámetros de enrutamiento y parámetros de URL. Los parámetros de enrutamiento son los que especificó utilizando comodines en la propia página y son la ruta real al archivo. Los parámetros de URL son opcionales.

Averiguar esto puede ser un poco complicado, pero afortunadamente tiene un depurador a su lado, por lo que puede establecer un punto de interrupción en OnGetAsync() y mostrar el árbol completo de variables locales.

Encontrarás, a continuación this.PageContext.RouteData, hay una RouteValueDictionary<string, object> que almacena todas las rutas. Tenga en cuenta que esto incluye la ruta de la página en sí, por lo que si ha utilizado /Download/{param} como ruta, el param será la segunda opción.

La mejor manera de recuperar los parámetros es buscarlos por clave:

Asimismo, los parámetros de consulta también están disponibles, aunque desde un objeto diferente. Necesitarás iniciar sesión HttpContext.Request.Query, el cual es un QueryValueDictionary que contiene los parámetros de URL y funciona de la misma manera que la ruta.

Por lo tanto, puede utilizar estos parámetros para buscar o influir en la lógica. Sin embargo, si está almacenando respuestas en caché, querrá asegurarse de que las condiciones y búsquedas de la caché también se vean afectadas por estos parámetros, de lo contrario, puede tener problemas con comportamientos inesperados de almacenamiento en caché.

TE INTERESA>>  TIFF People's Choice Awards 2022: lista completa de ganadores

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Botón volver arriba