asp.net 如何从用户输入在http头中创建有效的文件名

mwngjboj  于 2023-10-21  发布在  .NET
关注(0)|答案(1)|浏览(96)

NET 7 MVC应用程序运行在Debian与Apache应该打开PDF文件在浏览器中。从Make a file open in browser instead of downloading it实现的解决方案

how to specify name for saving pdf from browser
控制器包含代码

public async Task<IActionResult> OpenPdf()
  {
    byte[] pdf = CreatePdf();
    string filename = "\",'õäöü";
    Response.Headers.Add("Content-Disposition", $"inline; filename={filename}.pdf");
    return File(result, "application/pdf");
    }

议题:

  1. Chrome抛出错误ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION Accoding to Duplicate headers and Calling the file in the wrong path
    这是由像这样的人物造成的
',"

在header中。
1.如果这些字符被删除,则仅在Apache中出现头中的非法控制字符错误(从Visual Studio IDE运行正常)。这很可能是由汉字引起的。
如何在http头中编码文件名?
根据Duplicate headers and Calling the file in the wrong path,只允许使用字母数字字符。如何将任何unicode字符串转换为有意义的法律的文件名的头?
在这种情况下,应替换为uooa字符,引号,samces和逗号可以删除。但是,文件名来自用户输入,可能包含任何unicode字符。

wvt8vs2t

wvt8vs2t1#

您需要使用UrlEncode来表示文件名、URL名称等。

var encodedFileName = HttpUtility.UrlEncode(fileName + ".pdf",  System.Text.Encoding.UTF8)
Response.Headers.Add("Content-Disposition", $"inline; filename={encodedFileName}");

相关问题