C# asp.net中不允许使用用于访问路径的http谓词post

C# asp.net中不允许使用用于访问路径的http谓词post,c#,button,postback,response.redirect,C#,Button,Postback,Response.redirect,当我写代码的时候 <asp:Button ID="Button1" runat="server" onclick="Button1_Click" PostBackUrl="~/Biodata.xls" Text="Button" /> protected void Button1_Click(object sender, EventArgs e) { Server.Transfer("a.aspx"); } 受保护的无效按钮1\u单击(对象发送者,

当我写代码的时候

 <asp:Button ID="Button1" runat="server" onclick="Button1_Click" 
        PostBackUrl="~/Biodata.xls" Text="Button" />

 protected void Button1_Click(object sender, EventArgs e)
{
    Server.Transfer("a.aspx");
}

受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
服务器传输(“a.aspx”);
}
我得到下面给出的错误

不允许使用用于访问路径“/WebSite4/Biodata.xls”的HTTP谓词POST


下载xls文件后,我试图将页面重定向到另一个页面。

您正在查看此部分:

Server.Transfer("a.aspx");
PostBackUrl="~/Biodata.xls"
但错误消息指的是这一部分:

Server.Transfer("a.aspx");
PostBackUrl="~/Biodata.xls"
不要回发到xls文件。这不是下载东西的方式。你不能“下载一些东西然后重定向到其他地方”。HTTP请求和响应不是这样工作的

浏览器请求了您的页面。您正在返回一个响应

  • 你可以把工作交给a.aspx。那么a.aspx的任务就是返回响应

  • 或者,您可以使用xls文件本身进行响应,在HTTP头中使用适当的内容类型和配置。您将使用Response.BinaryWrite之类的东西,然后取决于浏览器如何处理它。浏览器可以使用Excel之类的东西打开它,也可以为用户提供保存文件的机会

  • 你不能同时做这两件事。你必须选择


    有关其他相关问题,请参见和。

    为什么不改用
    Response.Redirect()
    ?如果我编写Response.Redirect(),也会发生同样的情况