我有一个字符串
http://localhost:1114/api/Upload/GetFile?uploadFile=/Uploads/SupportingDocuments/ca2432cc-a9a3-4b98-b27a-7fadf9bb524bNC%20#1%20-%20MAIL%20TO%20ACCREDITATION%20BODY%20DAC.pdf
文件名具有我在调试控制器接收后发现的字符哈希标记"#"
/Uploads/SupportingDocuments/ca2432cc-a9a3-4b98-b27a-7fadf9bb524bNC
作为文件名,但如果我删除它,那么它会收到正确的文件名。我有很多带有此文件名的文档
ca2432cc-a9a3-4b98-b27a-7fadf9bb524bNC #1 - MAIL.pdf
所以如何在 c# 中也使用此字符进行 api 调用
[HttpGet]
[Route("GetFile")]
public IHttpActionResult GetFile(string uploadFile)
{
//without # works only need solution
}
是的,这是因为在 URI 中,#
是片段标识符的开头。这不是路径的一部分。如果您需要它作为路径(或查询参数(的一部分,则需要将其转义为%23
,就像您已经将空格转义为%20
一样。
来自 RFC 3986:
因此,片段标识符不用于特定于方案 处理 URI;相反,片段标识符是分开的 在取消引用之前从 URI 的其余部分,因此 片段本身中的标识信息被取消引用 仅由用户代理,而不考虑 URI 方案。
换句话说,当您发送带有片段标识符的 URI 请求时,片段标识符将被剥离,并由浏览器(或发送请求的任何内容(进行后处理。因此,如果您尝试将其用作常规路径的一部分,这是一个大问题。
您可以将#
前后的空格替换为-
。 例如ca2432cc-a9a3-4b98-b27a-7fadf9bb524bNC-#-MAIL-TO-ACCREDITATION-BODY-DAC.pdf