tag route page net data asp all asp.net asp.net-mvc optimization asp-classic bundling-and-minification

asp.net - route - forms asp net core



Paquetes ASP.NET MVC en ASP clásico(o PHP, etc.) (2)

El pensamiento salvaje de AardVark me dio algunas ideas y lo descubrí por mi cuenta. La solución en sí es bastante simple.

Aquí está la solución para cualquier persona que pueda necesitar una solución similar.

Después de haber registrado los paquetes en ASP.NET MVC (Global.asax.cs o BundleConfig):

List<string> bundleHtml = new List<string>(); bundleHtml.Add(Scripts.Render("~/bundles/legacybase").ToString()); bundleHtml.Add(Styles.Render("~/styles/legacycss").ToString()); File.WriteAllLines(Server.MapPath("~/dyn_legacy_bundle.inc"), bundleHtml, System.Text.Encoding.UTF8);

Esto generará el archivo dyn_legacy_bundle.inc que contiene las etiquetas apropiadas de <script> que incluyen el hash de versión (o las versiones de depuración si la depuración está habilitada).

En ASP clásico (o algún PHP rizado, etc.):

<head> <!--#include file="dyn_legacy_bundle.inc" --> </head>

Esto usará el archivo que ASP.NET generó al inicio y utilizará el css / javascript incluido.

Lo negativo es que si los archivos incluidos se cambian en el tiempo de ejecución, este archivo dinámico no se actualiza. Eso causará que los paquetes no se almacenen en caché. El reciclado del grupo de aplicaciones finalmente arreglará el almacenamiento en caché, por lo que creo que viviremos con él. Avísame si encuentras una forma de evitar esto.

Tenga en cuenta que esto funcionará con cualquier otro marco también (es decir, PHP)

Tenemos una aplicación híbrida que todavía ejecuta parte de la aplicación con ASP clásico a lo largo de ASP.NET MVC. Me gustaría usar Javascript y estilos incluidos en ASP clásico también.

En ASP.NET podemos usar muy bien las cosas agrupadas con el almacenamiento en caché muy bien, estamos utilizando Script.Render, que agrega hash de versión a la URL de búsqueda.

La cosa es que este método, por supuesto, no está disponible en ASP clásico.

Podemos usar bundled directamente de html <script src="bundles/js?v=<%=version%>"/> . La variable de versión es la variable ASP clásica utilizada en la prevención de caché (fuerza de actualización del navegador). Se cambia entre versiones.

El problema es que si el ASP clásico no proporciona el hash correcto para agrupar la solicitud, la agrupación de MVC devolverá el caching: no-caching encabezado caching: no-caching , que indicará al navegador que no lo guarde en caché.

¿Tienes alguna buena idea? ¿Podría calcularse ese hash en ASP clásico? ¿Podría decir que la agrupación permite el almacenamiento en caché sin v = hash? ¿Se podría transferir v = hash desde MVC en el inicio? Tenemos mecanismos para transferir variables entre Classic ASP y MVC, pero es ese hash algo accesible desde el código de inicio de MVC.


Otra opción:

Configurar un controlador (es decir, Bundles.ashx)

public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; context.Response.Write(System.Web.Optimization.Styles.Render("~/css")); }

De php:

echo file_get_contents("http://example.com/Bundles.ashx");

Puede usar la cadena de consulta para especificar diferentes paquetes.