我需要对我的 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
不支持通配符。
没有自定义中间件有没有办法做到这一点?在我看来,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
方法可以处理写作。