You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Azure C# SDK启停Azure SWA或设置离线重定向

使用Azure C# SDK管理静态Web应用(SWA)的临时停止、重定向及恢复方案

一、临时停止静态Web应用

Azure静态Web应用没有直接的"停止"API,但可以通过禁用托管状态或修改配置阻断请求实现类似效果。基于你已有的GenericResource实例,可通过更新资源属性操作:

方法:设置托管状态为禁用

部分Azure区域支持通过更新properties.state属性禁用SWA,代码示例:

using Azure.ResourceManager;
using Azure.ResourceManager.Resources;

// 假设已获取到GenericResource实例swaResource
var updateParams = new GenericResourcePatch();
updateParams.Properties = new Dictionary<string, object>
{
    ["state"] = "Disabled"
};

// 执行更新
await swaResource.UpdateAsync(WaitUntil.Completed, updateParams);

注意:若所在区域不支持该属性,可改用下方的重定向方案替代停止效果。

二、将所有请求重定向至offline.html

通过修改SWA的路由规则配置,添加一条最高优先级的重定向规则,实现全局跳转:

// 获取当前SWA的配置信息
var currentProps = swaResource.Data.Properties as Dictionary<string, object>;
var config = currentProps["configuration"] as Dictionary<string, object>;
var routes = config["routes"] as List<object> ?? new List<object>();

// 插入优先级最高的重定向路由
routes.Insert(0, new Dictionary<string, object>
{
    ["route"] = "/*",
    ["redirect"] = "/offline.html",
    ["statusCode"] = 302, // 临时重定向,恢复时移除即可
    ["priority"] = 1 // 确保优先级高于其他路由
});

// 准备更新参数
var updateParams = new GenericResourcePatch();
updateParams.Properties = new Dictionary<string, object>
{
    ["configuration"] = new Dictionary<string, object>
    {
        ["routes"] = routes
    }
};

// 提交配置更新
await swaResource.UpdateAsync(WaitUntil.Completed, updateParams);

恢复时,只需删除这条新增的路由,重新执行配置更新即可。

三、删除后快速恢复SWA

若需要删除SWA后快速恢复,建议先导出ARM模板,删除后通过模板重新部署:

1. 导出SWA的ARM模板

// 导出资源模板
var exportResult = await swaResource.GetClient<ResourcesManagementClient>()
    .Resources.ExportTemplateAsync(swaResource.Data.ResourceGroupName, swaResource.Data.ResourceType, swaResource.Data.Name);

// 将模板保存到本地或云存储(示例:保存到本地文件)
string templateJson = exportResult.Template.ToString();
File.WriteAllText("swa-backup-template.json", templateJson);

2. 删除SWA资源

// 执行删除操作
await swaResource.DeleteAsync(WaitUntil.Completed);

3. 通过模板快速恢复

using Azure.ResourceManager.Resources.Models;

// 加载备份的模板
string templateJson = File.ReadAllText("swa-backup-template.json");
var deploymentContent = new DeploymentContent
{
    Template = BinaryData.FromString(templateJson),
    Parameters = new Dictionary<string, DeploymentParameter>()
    {
        // 若模板包含参数,需设置对应值(例如资源名称)
        ["name"] = new DeploymentParameter { Value = swaResource.Data.Name }
    }
};

// 在原资源组部署模板恢复SWA
var resourceGroup = await swaResource.GetResourceGroupAsync();
await resourceGroup.GetDeployments().CreateOrUpdateAsync(
    WaitUntil.Completed,
    "RestoreSwaDeployment",
    deploymentContent);

注意:导出模板时需确保包含所有关联资源(如存储账户、CDN)的配置,否则恢复后可能无法正常运行。

内容的提问来源于stack exchange,提问作者Cara Wilderman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:45:08