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

Blazor Server/Client部署IIS10时Service-Worker.js加载失败问题

问题1:Service-Worker.js加载失败、无法注册

先排查IIS静态文件配置

  • 确认IIS站点的静态文件功能已启用,service-worker.js所在的wwwroot目录需给IIS_IUSRS组添加读取权限(不建议用Everyone,存在安全风险)。
  • 检查IIS的MIME类型设置,确保.js对应的类型是application/javascript,默认配置一般包含,若被修改则手动补全。

调整Program.cs的静态文件中间件配置

针对你的.NET 6顶级语句结构的Program.cs,添加以下代码给service-worker.js设置强制不缓存,避免浏览器旧缓存干扰加载:

app.UseStaticFiles();
// 单独配置service-worker.js的缓存策略
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "wwwroot")),
    RequestPath = "/service-worker.js",
    OnPrepareResponse = ctx =>
    {
        ctx.Context.Response.Headers.Append("Cache-Control", "no-cache, no-store, must-revalidate");
        ctx.Context.Response.Headers.Append("Pragma", "no-cache");
        ctx.Context.Response.Headers.Append("Expires", "0");
    }
});

核对客户端注册代码

打开index.html,确认Service Worker的注册路径为根路径/service-worker.js,避免相对路由导致路径错误:

<script>
if ('serviceWorker' in navigator) {
    window.addEventListener('load', () => {
        navigator.serviceWorker.register('/service-worker.js')
            .then(registration => {
                console.log('SW注册成功: ', registration);
            })
            .catch(err => {
                console.log('SW注册失败: ', err);
            });
    });
}
</script>

问题2:MS Auth登录报错(Cannot read properties of undefined (reading 'toLowerCase'))

该错误多因MSAL初始化不完整或认证配置缺失导致,适配你的.NET 6 Program.cs结构,按以下步骤修复:

1. 补全Program.cs的认证配置

直接在Program.cs中添加认证与授权服务及中间件(注意中间件顺序):

var builder = WebApplication.CreateBuilder(args);

// 注册MS身份认证服务
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

// 添加授权服务
builder.Services.AddAuthorization();

var app = builder.Build();

// 启用认证、授权中间件,顺序不可颠倒
app.UseAuthentication();
app.UseAuthorization();

// Blazor相关配置
app.UseRouting();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();

2. 修正appsettings.json的AzureAd配置

确保配置参数与Azure AD后台一致,回调路径需匹配IIS站点URL:

"AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "你的租户域名.onmicrosoft.com",
    "TenantId": "你的租户ID",
    "ClientId": "你的客户端ID",
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath ": "/signout-callback-oidc"
}

3. 调整index.html的MSAL初始化代码

确认MSAL脚本加载正常,初始化参数填写正确:

<script src="_content/Microsoft.Authentication.WebAssembly.Msal/AuthenticationService.js"></script>
<script>
    window.msalConfig = {
        auth: {
            clientId: '你的客户端ID',
            authority: 'https://login.microsoftonline.com/你的租户ID',
            redirectUri: window.location.origin,
            postLogoutRedirectUri: window.location.origin
        }
    };
</script>

注意:MS Auth强制要求HTTPS,redirectUri需为IIS站点的完整HTTPS地址。

4. 检查IIS的SSL绑定

务必给IIS站点绑定有效SSL证书,使用HTTPS访问站点,否则认证流程会直接中断,触发对象未定义的错误。


额外排查建议

  • 发布项目时选择独立部署模式,确保所有依赖项被完整打包,避免IIS缺少运行时文件。
  • 查看IIS日志(默认路径C:\inetpub\logs\LogFiles),定位service-worker.js请求的具体状态码(如403为权限问题、404为路径错误、500为服务器内部异常)。
  • 清除浏览器的Service Worker缓存与本地存储,排除旧缓存干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:39:54