获取字符串中具有哈希标签#的文件API调用不起作用?C#.



我有一个字符串

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

最新更新