Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Response.WriteFile提供拒绝访问错误_C#_Asp.net - Fatal编程技术网

C# 使用Response.WriteFile提供拒绝访问错误

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

我正在一个网站上工作,我正在用asp.net和c#开发这个网站。目前我有一个
GridView
,它有3列

  • 文件名
  • 文件描述
  • 下载文件
  • 我正在从数据库中获取所有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”的实际值是多少?@Dura
    FileLocation
    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 ''