的Windows Server 2012 R2IIS 8.5文件找不到路径 - URL编码
IIS 8.5
的.NET Framework 4.5.1与Windows 8.1或Windows Server 2012 R2
ASP .NET应用程序安装用Visual Studio 2012中的C#编写
这是一个最近才开始发生的问题,该应用程序在较早的操作系统上运行(我相信IIS 7.5 Windows 2008R2,但不是100%确定)。
本质上,当应用程序在本地系统上建立一个文件的路径时,它将URL编码为路径。然后,当应用程序试图找到所述文件时,它返回File Not Found。
该代码本身是一个有点愚蠢。我没有写,我打算在时间允许的情况下重新写。下面是试图抓住文件,并在屏幕上显示它的方法:
private void OpenClaimFile(String PackageId, String ClaimId, String DocType, String AttachmentID)
{
string filename = string.Empty;
string folderPath = Helper.PackagePath + PackageId + @"\" + ClaimId + @"\";
string path = string.Empty;
if (string.IsNullOrEmpty(DocType) || DocType == " ")
{
filename = AttachmentID;
}
else
{
filename = DocType + "_" + AttachmentID;
}
path = folderPath + filename + ".pdf";
if (File.Exists(path))
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=" + filename);
Response.ContentType = "application/pdf";
Response.WriteFile(Helper.PackagePath + PackageId + "/" + ClaimId + "/" + filename + ".pdf");
}
else
{
Alert("File Not Found!");
}
}
Helper.PackagePath
从web.config中抓起,并像"D:\RootPath\"
我测试不包含空格的文件,以及文件由浏览器下载到Downloads文件夹。这是一个次要问题,因为它应该在浏览器中显示为PDF。
使用Sysinternals的ProcessMon,我发现,在路径字符串中的实际文件名是一样的东西D:\RootPath\PackageID\ClaimID\My%20Mos%20Excellent%20File.pdf
而不是D:\RootPath\PackageID\ClaimID\My Most Excellent File.pdf.
的问题似乎是,该应用程序现在URL编码的路径,它建立并试图找到该文件并失败。我已经在网上搜索了关于这方面的任何信息,而我的结果几乎没有。 I did find this one article。
今晚如果我有机会,我会尝试尝试在web.config中找到的文章中引用的更改,看看它是否可以解决问题。作为参考,这种变化是:
<configuration>
<appSettings>
<add key="aspnet:UseLegacyRequestUrlGeneration" value="true" />
</appSettings>
但是,我会很感激任何人都有这个问题的任何见解。
另外,如果任何人有任何洞察我的第二个问题,我会很感激。我只是开始看它,但浏览器应该现场打开文件,而不是下载它。这种行为也是最近的。我意识到这是系统中的一项新安全设置,禁止打开PDF文件,因为它们可能很危险。不过,我还没有完全研究过这个问题。
我看不到ClaimId在哪设置,但是你不能总是这样吗ClaimId = System.Web.HttpUtility.UrlDecode(ClaimId)?如果ClaimId未经过网址编码,则不会发生任何错误。尝试Content-Disposition:内联;文件名=“filename.pdf”为您的第二个问题。 – mhanney 2014-12-02 20:27:34
索赔ID只是一个正在传递的字符串。我们从网页抓取这些信息,作为用户点击查看文件的GridView的一部分。这只是一个字符串。重要的部分是AttachmentID,它是URL编码的实际文件名。我可能必须做你的建议。我试图*不*由于其他约束而进行任何代码更改。但是,看起来我可能没有这种奢侈。感谢您的意见。 – Dan7el 2014-12-02 20:44:41
噢,我看到AttachmentID当然是文件名了。我认为你是正确的, 将是修复。 –
mhanney
2014-12-02 21:25:20