Versioning Content URLs in ASP.NET MVC 5
I just published a new Nuget package, AspNet.Mvc.AssetVersioning. This package extends the MVC5 @Url
Razor helper with a new VersionedContent
method which appends a Base64-encoded SHA256 hash to the end of the URL for cache-busting.
Versioning in ASP.NET Core
In ASP.NET Core, you can version URLs using the asp-append-version
tag helper:
<script src="~/scripts/foo.js" type="text/javascript" asp-append-version="true"></script>
Which will output:
<script src="/scripts/foo.js?v=hash" type="text/javascript"></script>
Versioning in ASP.NET MVC 5
Since I have not yet migrated to ASP.NET Core for Keep Track of My Games, I needed the same functionality in order to remove some old libraries that are not available in .NET Core. Now you can achieve the same thing using my package:
@using System.Web.Mvc.AssetVersioning;
<script src="@Url.VersionedContent("~/scripts/foo.js")" type="text/javascript"></script>
This will output the following:
<script src="/scripts/foo?base64-encoded-hash" type="text/javascript"></script>
The helper will automatically cache hashes for files for the lifetime of the HttpContext
. So, basically, for the lifetime of the application pool. Restart the site/app pool to refresh the cache, which should happen on any new deployments.
You can simplify the @using
statement usage by adding the namespace to the /configuration/system.web.webPages.razor/pages/namespaces
section in the Views/web.config
file, as outlined in the GitHub repo README.
Hope this helps someone else facing the same issue!