c# - 自定义处理程序不喜欢 Firefox 上的空格

标签 c# asp.net

我有一个实现 IHttpHandler 的自定义处理程序。自定义处理程序允许我们生成一个动态 URL 供人们下载文件。

代码是这样的

public void ProcessRequest(HttpContext context)
{
    context.Response.AddHeader("Content-Disposition", "attachment;filename=" + attachment.FileName);
    context.Response.AddHeader("Content-Length", attachment.Fileblob.Length.ToString());
    context.Response.ContentType = GetMimeType(attachment.FileName);
    context.Response.OutputStream.Write(attachment.Fileblob, 0, attachment.Fileblob.Length);
}

问题出在 attachment.Filename 上。如果文件名恰好有这样的空格,

文件名 - 1.bmp

然后在 Internet Explorer 上它工作正常,但在 Firefox 上文件下载对话框将其截断为这样,

文件名

没有扩展名或任何东西。这个我也试过,

附件.FileName.Replace("", "%20")

它在 IE 中再次工作,但在 firefox 中它导致在下载对话框中将文件名设置为此,

文件名%20-%201.bmp

我也试过,

HttpUtility.UrlEncode(附件.文件名)

在 firefox 和 IE 中都是这样,

文件名+-+1.bmp

有什么想法吗?

最佳答案

尝试用 %20 替换实际的空格字符。应该仍然适用于所有浏览器。

编辑

好的,所以这似乎没有帮助。那么,B 计划。

让我们尝试调整我们的 Content-Disposition HTTP header ,以便根据 RFC 2231 将附件文件名用双引号引起来.

public void ProcessRequest(HttpContext context)
{
    context.Response.AddHeader("Content-Disposition", String.Format("attachment;filename=\"{0}\"", attachment.FileName));
    context.Response.AddHeader("Content-Length", attachment.Fileblob.Length.ToString());
    context.Response.ContentType = GetMimeType(attachment.FileName);
    context.Response.OutputStream.Write(attachment.Fileblob, 0, attachment.Fileblob.Length);
}

关于c# - 自定义处理程序不喜欢 Firefox 上的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6133838/

相关文章:

javascript - 显示消息而不重新加载 html 页面

asp.net - 表单例份验证 web.config 设置

c# - devexpress xtrareports 与报告服务

c# - Azure 无效 AccessToken

c# - 包含从 Request.Form 中挑选的数据的单元测试方法。新手问题

c# - 无法找到所需的服务。通过在调用 'IServiceCollection.AddControllers' 内部调用 'ConfigureServices()' 添加所需的服务

c# - 在 ajax 日历扩展器控件中禁用周末和国定假日

c# - WebRequest 不会使缓存项在同一进程中可用

c# - 调整 DataGridView 宽度以适应列

c# - Microsoft 蓝牙堆栈并入 Widcomm 蓝牙堆栈?