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

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网站的文件结构与权限

    1. 登录Azure门户,进入对应App Service,通过高级工具 > Kudu查看网站实际文件系统,确认PdfForms/1111-1858jj-84090-8392-c4365d03b5c1/Section_4364.pdf的路径、文件名大小写是否与URL完全匹配(Azure文件系统区分大小写)。
    2. 若PDF是用户上传的文件,确认上传时是否设置了正确的读取权限,避免因权限不足导致无法访问。
  • 处理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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:16:00