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

.NET 8 Blazor Web App部署IIS后无法访问本地/局域网PDF

部署到IIS后无法通过绝对路径访问PDF文件(调试正常)

调试阶段,本地和Web App服务器都能正常从绝对路径打开PDF,但部署到IIS后,无论是本地还是局域网内都无法访问。已设置应用程序池身份为LocalSystem(最高权限),且存放PDF的文件夹已对所有账户开放权限,问题仍未解决。想排查还有哪些权限相关的操作遗漏,相关代码如下:

@code {
    string filepath = @"c:\\users\myusers\myfolder\ + filename;
    
    byte[] fileBytes = await File.ReadAllBytesAsync(filepath);
    string base64 = Convert.ToBase64String(fileBytes);
    string dataUri = $"data:application/pdf;base64,{base64}";

    await JSRuntime.InvokeVoidAsync("eval", $@"
    var win = window.open();
    win.document.write('<iframe src=""{dataUri}"" frameborder=""0"" style=""border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;"" allowfullscreen></iframe>');
                ");
}

其中filename为查询结果。


排查解决方案:

  • 开启应用程序池的「加载用户配置文件」选项
    IIS默认可能未开启该选项,即便使用LocalSystem身份,未加载用户配置文件时,访问C:\Users\下的目录会触发权限限制(用户目录的权限依赖于用户配置加载)。操作步骤:IIS管理器→找到对应应用程序池→高级设置→进程模型→加载用户配置文件,设置为True。

  • 修正代码路径语法错误
    原代码中filepath的拼接存在语法错误:@"c:\\users\myusers\myfolder\ + filename;缺少闭合双引号,且转义符冗余(@符号开头的字符串不需要双反斜杠)。建议改用Path.Combine避免手动拼接错误:

    string filepath = Path.Combine(@"C:\Users\myusers\myfolder", filename);
    
  • 检查杀毒软件/Windows Defender拦截
    部分杀毒软件会阻止IIS进程(w3wp.exe)访问用户目录下的文件,即便权限设置正确也会被拦截。可临时关闭防护软件测试,或把PDF文件夹添加到防护排除列表。

  • 确认路径大小写与实际匹配
    虽然Windows文件系统不区分大小写,但IIS进程在某些配置下可能对大小写敏感,确保代码中的路径与实际文件夹、文件名完全一致(包括大小写)。

  • 检查IIS请求筛选规则
    即便你是读取文件内容转Base64而非直接请求文件路径,仍需确认IIS的请求筛选是否存在阻止相关操作的规则:IIS管理器→对应网站→请求筛选→规则,排查是否有拦截逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:18:31