Azure中ASP.NET网站PDF存在却无法打开:资源错误求助
在Azure上部署的ASP.NET网站中,点击PDF文件目录内的链接时出现错误:
"The resource you are looking for has been removed, had its name changed, or is temporarily unavailable."
但确认PDF文件实际存在,尝试访问的URL示例:https://....azurewebsites.net/PdfForms/1111-1858jj-84090-8392-c4365d03b5c1/Section_4364.pdf
生成超链接的代码如下:
if (dt != null && dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { HyperLink hyperLink = new HyperLink(); hyperLink.NavigateUrl = "../PdfForms/" + dr[0].ToString() + "/" + Utility.CleanUrl(dr[1].ToString()) + ".pdf"; hyperLink.Text = dr[1].ToString() + " - uploaded on " + dr[2].ToString(); hyperLink.Target = "_blank"; Literal li = new Literal(); li.Text = "<br><br>"; PlaceHolder1.Controls.Add(hyperLink); PlaceHolder1.Controls.Add(li); } } else { Label label = new Label(); label.Text = "There are no forms for you to download"; PlaceHolder1.Controls.Add(label); }
修正相对路径为根路径
代码中使用的../PdfForms/相对路径依赖当前页面的目录层级,容易出错。建议改用ASP.NET根路径标识~/,确保路径从网站根目录开始解析:hyperLink.NavigateUrl = "~/PdfForms/" + dr[0].ToString() + "/" + Utility.CleanUrl(dr[1].ToString()) + ".pdf";也可以配合
ResolveUrl方法确保路径解析正确:hyperLink.NavigateUrl = Page.ResolveUrl("~/PdfForms/" + dr[0].ToString() + "/" + Utility.CleanUrl(dr[1].ToString()) + ".pdf");校验
Utility.CleanUrl的处理结果
确认Utility.CleanUrl方法对文件名的处理是否和实际PDF文件名完全一致(包括大小写、特殊字符保留/移除规则)。比如原始文件名为Section_4364,若处理后变成小写或修改了字符,会导致路径不匹配。可在代码中临时输出处理后的文件名进行核对。检查Azure网站的文件结构与权限
- 登录Azure门户,进入对应App Service,通过高级工具 > Kudu查看网站实际文件系统,确认
PdfForms/1111-1858jj-84090-8392-c4365d03b5c1/Section_4364.pdf的路径、文件名大小写是否与URL完全匹配(Azure文件系统区分大小写)。 - 若PDF是用户上传的文件,确认上传时是否设置了正确的读取权限,避免因权限不足导致无法访问。
- 登录Azure门户,进入对应App Service,通过高级工具 > Kudu查看网站实际文件系统,确认
处理URL编码问题
如果文件名或目录名包含特殊字符,需对动态生成的路径部分进行URL编码:string folderName = HttpUtility.UrlEncode(dr[0].ToString()); string fileName = HttpUtility.UrlEncode(Utility.CleanUrl(dr[1].ToString())); hyperLink.NavigateUrl = "~/PdfForms/" + folderName + "/" + fileName + ".pdf";检查URL重写规则
查看网站web.config中的<rewrite>节点,确认是否存在拦截PdfForms目录下静态文件请求的规则,如有需调整规则允许PDF文件访问。直接测试静态文件访问
在Kudu调试控制台中,或使用curl工具直接访问该PDF的完整URL,验证是否能正常返回文件。若直接访问也报错,说明是文件路径或服务器配置问题;若能访问,则是前端生成的链接存在错误。
内容的提问来源于stack exchange,提问作者KevBarri

