在响应标头中传递非ASCII字符

时间:2018-11-27 13:13:01

标签: c# asp.net-web-api asp.net-core asp.net-core-2.0

我正在尝试下载文件中某些文件包含非ASCII字符的文件,此时下载失败。它给出了以下错误。

  

无效的非ASCII或标头中的控制字符:0x000D

该代码与ASCII字符一起使用效果很好。我将响应标头中的文件名传递给以角度6开发的UI。

下面是我的代码

[HttpGet]
        [Route("someroute/downloadfile")]
        public IActionResult DownloadFile(int ID)
        {
            try
            {
                    using (ExcelPackage pck = bal.DownloadFile(ID))
                    {
                        System.Net.Mime.ContentDisposition cd = new System.Net.Mime.ContentDisposition
                        {
                            FileName = pck.File.Name,
                        };

                        Response.Headers.Add("Content-Disposition", cd.ToString());

                        return File(pck.GetAsByteArray(), "application /vndopenxmlformats-officedocument.spreadsheetml.sheet");
                    }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

但是,我的要求是我要按原样下载文件,尽管该文件包含非ASCII字符。

对此有任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以将非 ASCII 标头文本编码为 Base64,例如 Convert.ToBase64String(Encoding.UTF8.GetBytes(dirtyString)))

在 Angular 中,您可以使用 atob 取回非 ASCII 字符串。