C# 使用Response.WriteFile提供拒绝访问错误
我正在一个网站上工作,我正在用asp.net和c#开发这个网站。目前我有一个C# 使用Response.WriteFile提供拒绝访问错误,c#,asp.net,C#,Asp.net,我正在一个网站上工作,我正在用asp.net和c#开发这个网站。目前我有一个GridView,它有3列 文件名 文件描述 下载文件 我正在从数据库中获取所有3个值。这些值将作为列表返回。除了下载文件选项外,其他一切都正常工作。我正在使用一个ASP:LinkButton,如下所示 <asp:LinkButton ID="lnkDownload" Text="Download" Font-Bold="true" CommandArgument='<%# Eval("FileLocatio
GridView
,它有3列
列表返回。除了下载文件选项外,其他一切都正常工作。我正在使用一个ASP:LinkButton
,如下所示
<asp:LinkButton ID="lnkDownload" Text="Download" Font-Bold="true" CommandArgument='<%# Eval("FileLocation") %>' runat="server" OnClick="DownloadFile"></asp:LinkButton>
C代码是这样的
protected void DownloadFile(object sender, EventArgs e)
{
string filePath = (sender as LinkButton).CommandArgument;
Response.ContentType = ContentType;
Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));
Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
Response.WriteFile(filePath);//This line is throwing the error
Response.End();
}
我总是出错
Access to the path 'My path' is denied.
该文件夹具有正确的权限。如果需要代码的任何其他部分,请让我知道。提前感谢您的帮助。您的问题可能是您试图访问目录
来自MSDN文档关于getfilename方法的信息
string fileName = @"C:\mydir\myfile.ext";
string path = @"C:\mydir\";
string result;
result = Path.GetFileName(fileName);
Console.WriteLine("GetFileName('{0}') returns '{1}'",
fileName, result);
result = Path.GetFileName(path);
Console.WriteLine("GetFileName('{0}') returns '{1}'",
path, result);
// This code produces output similar to the following:
//
// GetFileName('C:\mydir\myfile.ext') returns 'myfile.ext'
// GetFileName('C:\mydir\') returns ''
你确定你真的要取回文件名吗?或者只是目录,如上面代码段中的第二个示例。@CodeCaster在我将其作为列表返回之前,它正在工作。:/I我已将IIS\u IUSER
组添加到权限中,它仍然是相同的,这肯定是问题的一部分。“FileLocation”的实际值是多少?@DuraFileLocation
以C:\Test\Files
的形式存储在数据库中,听起来像是一个目录,而不是一个文件……再说一遍,你还没有说你在哪里观察到了该值。您应该检查下载文件
方法中的值。如果它的值与之前工作时的值相同,那确实很奇怪,但我怀疑不是这样。你应该非常仔细地检查它-检查它是否没有任何额外的空格,检查它是否正确地使用了所有的反斜杠等。我从数据库中得到一个文件名&位置,作为列表返回。当用户点击下载按钮时,它意味着传递文件名并允许他们下载它。连接调试器并检查实际情况。@CodeCaster调试中的CommandArgument
值是C:\Test\Files
`@code这不是文件路径,是吗?@CodeCaster不,不是,这很奇怪,因为在返回路径之前:/
string fileName = @"C:\mydir\myfile.ext";
string path = @"C:\mydir\";
string result;
result = Path.GetFileName(fileName);
Console.WriteLine("GetFileName('{0}') returns '{1}'",
fileName, result);
result = Path.GetFileName(path);
Console.WriteLine("GetFileName('{0}') returns '{1}'",
path, result);
// This code produces output similar to the following:
//
// GetFileName('C:\mydir\myfile.ext') returns 'myfile.ext'
// GetFileName('C:\mydir\') returns ''