gpt4 book ai didi

azure - 在 ASP.NET Core 应用程序之间共享静态 Assets (或通过 Azure CDN?)

转载 作者:行者123 更新时间:2023-12-03 01:08:28 25 4
gpt4 key购买 nike

我有两个 ASP.NET Core 应用程序,它们共享许多静态资源(图像、CSS、字体等),作为临时解决方案,我在两个项目中保留副本。我想简化这一过程,显然只保留该 Assets 的一份副本,并使其可供两个项目访问。

我正在考虑这个问题的解决方案,想知道是否可以在解决方案中创建一个新项目,并以某种方式将内容复制到 Azure CDN,例如在 git commit 时,然后仅引用源中的 CDN URL。显然,我不想手动管理此内容,并且每次更改 CSS 或添加图像时都必须手动将文件上传到 CDN/存储端点。

但是,我不知道这是否可行,如果可行如何设置?应用程序本身托管在 Azure 中,因此需要作为 Visual Studio 修复(例如旧的“添加链接”似乎不再可用?)或在 Azure 中实现。

欢迎任何有关如何实现这一目标的建议。

谢谢

最佳答案

我使用 PhysicalFileProvider 在多个 ASP.NET Core Web 项目之间共享静态资源,并且效果非常好。我也在这里发布了相同的答案:https://stackoverflow.com/a/52048104/188740 ,因为它也适用于那里。

为此,我在 src 中创建了一个新文件夹。我将其命名为 assets,因此我的解决方案资源管理器看起来如下所示:

src/assets
src/Foo.Web1
src/Foo.Web2
test/Foo.Tests

我将所有共享静态资源(例如 css、JavaScript、图像)放在 /src/assets 中。现在,我将 /src/assets 映射到 Foo.Web1Foo.Web2 项目中的 wwwroot/assets 文件夹使用PhysicalFileProvider。在 Startup.csConfigure 方法中,我添加了以下内容:

if (Env.IsDevelopment())
{
// app is IApplicationBuilder and Env is IHostingEnvironment
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Regex.Replace(Env.ContentRootPath, $"{Env.ApplicationName}$", "assets"))),
RequestPath = new PathString("/assets"),
OnPrepareResponse = ctx =>
{
// Optionally manipulate the response as you'd like. for example, I'm setting a no cache directive here for dev.
ctx.Context.Response.Headers.Append("Cache-Control", "no-cache, no-store, must-revalidate");
}
});
}

现在,任何到达 /assets 的请求都将从 /src/assets 文件夹中处理,该文件夹可由 Foo.Web1 共享和Foo.Web2/src/assets 中的所有更改都将实时反射(reflect)。这在开发中效果很好,但在生产中,我不会这样做。相反,我将文件从 /src/assets 复制到 Foo.Web1/wwwroot/assetsFoo.Web2/wwwroot/assets部署脚本,因此不需要进行此重新映射。

关于azure - 在 ASP.NET Core 应用程序之间共享静态 Assets (或通过 Azure CDN?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40736169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com