Мне нужно версия файлов Javacript (для очистки кэша), но я не могу использовать asp-append-version
, поскольку файлы сценариев используются из импорта Javascript:
import * as Foo from './foo.js'
Поэтому япланируем иметь FileProvider
, который может обслуживать файл с запросом типа /js/v1.0/app.js
(и поэтому foo.js
будет обслуживаться с /js/v1.0/foo.js
). Можно обслуживать /v1.0/js/main.js
, пока поддерживается относительный путь.
Я пробовал это:
app.UseStaticFiles(new StaticFileOptions()
{
RequestPath = "/v*",
});
app.UseStaticFiles();
Но это не сработает, RequestPath
не поддерживает подстановочный знак.
Есть ли способ сделать это без специального Middleware? Промежуточное программное обеспечение FileProvider, по моему мнению, является излишним. Это мое текущее временное решение:
public static IApplicationBuilder UseVersionedScripts(this IApplicationBuilder app)
{
app.Use(async (context, next) =>
{
if (context.Request.Path.HasValue &&
context.Request.Path.Value.ToLower().StartsWith("/js/v"))
{
var filePath = context.Request.Path.Value.Split('/');
// Write the file to response and return if file exist
}
await next.Invoke();
});
return app;
}
Редактировать: я думаю, что в моем случае, если FileProvider не поддерживается, действие контроллера может быть лучше, чем промежуточное программное обеспечение, потому что PhysicalFile
метод может позаботиться о написании.