文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ASP.NET中怎么实现静态网站滚动更新

2023-06-20 14:02

关注

这期内容当中小编将会给大家带来有关ASP.NET中怎么实现静态网站滚动更新,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Intro

最近我们老板想让我实现一个静态网站“滚动更新”的功能,其实就是希望网站部署的时候网站内容完整的切换,不能网站部署的过程中一部分是新的内容,另外一部分是老的内容。

这让我想到了微软的 Azure App Service,上家公司主要是用微软的云服务 Azure,站点是部署到 Azure App Service 上的,Azure App Service 有一个部署槽的概念,我们的应用一个版本可以对应一个部署槽,通过部署槽我们就基本可以无缝地从一个版本切换到另外一个版本。

FileProvider

ASP.NET Core 里静态文件的托管是允许自定义一个 IFileProvider 的,默认会使用物理路径文件, ASP.NET Core 默认使用 wwroot 目录下作为默认的静态文件来源。

对于静态文件而言我们简单地使用两个目录来模拟两个部署槽,当需要的时候通过修改配置来动态修改生效的部署槽,基于 IOptionMonitor 和 PhysicalFileProvider 来实现一个简单的 DynamicFileProvider,实现代码如下:

public class DynamicFileProviderOptions{    public string CurrentSlot { get; set; }}public class DynamicFileProvider : IFileProvider{    private PhysicalFileProvider _physicalFileProvider;    private const string DefaultSlotName = "Slot1";    public DynamicFileProvider(IOptionsMonitor<DynamicFileProviderOptions> optionsMonitor, IWebHostEnvironment webHostEnvironment)    {        var webRoot = webHostEnvironment.ContentRootPath;        _physicalFileProvider = new PhysicalFileProvider(Path.Combine(webRoot, optionsMonitor.CurrentValue.CurrentSlot ?? DefaultSlotName));        optionsMonitor.OnChange(options =>        {            var path = Path.Combine(webRoot, options.CurrentSlot);            _physicalFileProvider = new PhysicalFileProvider(path);        });    }    public IDirectoryContents GetDirectoryContents(string subpath)    {        return _physicalFileProvider.GetDirectoryContents(subpath);    }    public IFileInfo GetFileInfo(string subpath)    {        return _physicalFileProvider.GetFileInfo(subpath);    }    public IChangeToken Watch(string filter)    {        return _physicalFileProvider.Watch(filter);    }}

看起来是不是简单,其实就是在 PhysicalFileProvider 的基础上封装了一下,配置发生变化的时候构建一个新的 PhysicalFileProvider

Construct Host

接着我们来看一下如何使用,使用代码如下:

var builder = Host.CreateDefaultBuilder(args);builder.ConfigureWebHostDefaults(webHostBuilder =>{    webHostBuilder.ConfigureServices((context, services) =>    {        services.Configure<DynamicFileProviderOptions>(context.Configuration);        services.AddSingleton<DynamicFileProvider>();    });    webHostBuilder.Configure(app =>    {        var dynamicFileProvider = app.ApplicationServices.GetRequiredService<DynamicFileProvider>();        app.UseStaticFiles(new StaticFileOptions()        {            FileProvider = dynamicFileProvider,        });    });});var host = builder.Build();host.Run();

这里的示例只需要这些代码我们的应用就可以跑起来了,接着我们就来看一下使用效果吧

Demo

在项目根目录运行 dotnet run 启动项目,然后访问 http://localhost:5000/index.html

ASP.NET中怎么实现静态网站滚动更新

然后我们再修改配置文件中的配置,把配置文件中 CurrentSlot 配置修改为 Slot2,然后再刷新页面,如下图所示:

ASP.NET中怎么实现静态网站滚动更新

那么是不是可以不修改配置文件实现部署槽切换呢,也是可以的,我提供了一个做切换的一个简单的 API

app.Map(new PathString("/redeploy"), appBuilder => appBuilder.Run(context =>{    if (context.RequestServices.GetRequiredService<IConfiguration>() is ConfigurationRoot configuration)    {        var currentSlot = configuration["CurrentSlot"];        configuration["CurrentSlot"] = "Slot2" != currentSlot ? "Slot2" : "Slot1";        configuration.Reload();        return context.Response.WriteAsync("Success");    }    return Task.CompletedTask;}));

这个 API 做的事情很简单,在 Slot1 和 Slot2 之间进行切换,如果原来是 Slot2 则切换成 Slot1 否则切换成 Slot2,修改配置之后调用一下 Reload 以触发配置更新,删除配置文件中的 CurrentSlot 配置,重新运行示例,查看 http://localhost:5000/index.html,还是看到的 Slot1 中的内容,然后我们调用一下 /redeploy 接口来动态切换一下配置,然后再次刷新页面就会看到 Slot2 中的内容,再调用一下 redeploy 之后刷新页面就会变回 Slot1 中的内容

ASP.NET中怎么实现静态网站滚动更新

上述就是小编为大家分享的ASP.NET中怎么实现静态网站滚动更新了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯