ASP.NET应用程序中Response.WriteFile期间路径问题中的非法字符

时间:2014-01-21 14:16:52

标签: c# asp.net .net iis webforms

我有一个ASP.NET页面的一部分可以执行一些操作。首先,当加载并显示某个面板时,声音文件将通过以编程方式设置的embed标记播放。

标记:

<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tr>
    <td colspan="2" width="100%" align="center">
      <asp:Literal runat="server" ID="lblEmbeddedObject" />
    </td>
  </tr>
  <tr>
    <td colspan="2">
      &nbsp;
    </td>
  </tr>
  <tr>
    <td align="left">
      <asp:LinkButton runat="server" Text="Download" ID="btnDownloadCall" CssClass="button" OnClick="btnDownloadCall_OnClick" />
    </td>
    <td align="right">
      <asp:LinkButton runat="server" ID="btnCloseListen" Text="Close" CssClass="button" OnClick="btnCloseListen_OnClick" />
    </td>
  </tr>
</table>

设置embed的代码隐藏:

  string fileName = @"/GetFile.aspx?file=prompts\141-319.wav&tid=prompt";            
  this.PlayingCallFile = fileName;
  this.lblEmbeddedObject.Text = "<EMBED SRC=\"" + fileName + "\" WIDTH=395px HEIGHT = 100px AUTOPLAY=true CONTROLLER=true LOOP=false>";     

点击下载按钮时触发的代码(供浏览器不支持时使用embed):

     string type = "text/wav";

     Response.AppendHeader("content-disposition",
         "attachment; filename=" + this.PlayingCallFile);
     if (type != "")
        Response.ContentType = type;
     System.Diagnostics.Debug.WriteLine("Transmist to client:: " + this.PlayingCallFile);
     Response.WriteFile(@"/GetFile.aspx?file=prompts\141-319.wav&tid=prompt");
     Response.End();

字符串"/GetFile.aspx?file=prompts\141-319.wav&tid=prompt"是问题开始的地方。奇怪的是,当此字符串文字被设置为src标记内的embed属性时,它会加载并在支持它的浏览器中播放。对于不支持embed的浏览器,用户可以按下导致第三个代码段执行的链接按钮。

但是,当执行第三个代码段时,我可以Illegal characters in path例外。我知道它挂在了/字符上,但我不知道如何构建我的Response.WriteFile任何其他方式,因为当我尝试对其进行编码时,我找不到文件和其他错误URL。

如何解决路径问题中的这些非法字符的任何信息将不胜感激。感谢。

0 个答案:

没有答案