获取文件api调用在字符串中使用哈希标记#不起作用?C#

nou*_*had 0 .net c# api model-view-controller

我有一个字符串

 http://localhost:1114/api/Upload/GetFile?uploadFile=/Uploads/SupportingDocuments/ca2432cc-a9a3-4b98-b27a-7fadf9bb524bNC%20#1%20-%20MAIL%20TO%20ACCREDITATION%20BODY%20DAC.pdf
Run Code Online (Sandbox Code Playgroud)

文件名有charecter hash标签'#',我在调试控制器接收后找到了它

  /Uploads/SupportingDocuments/ca2432cc-a9a3-4b98-b27a-7fadf9bb524bNC
Run Code Online (Sandbox Code Playgroud)

作为文件名,但是如果我删除它,那么它会收到正确的文件名.我有很多带有这个文件名的文件

  ca2432cc-a9a3-4b98-b27a-7fadf9bb524bNC #1 - MAIL.pdf
Run Code Online (Sandbox Code Playgroud)

那么如何使用api调用也可以在c#中使用这个字符

   [HttpGet]
    [Route("GetFile")]
    public IHttpActionResult GetFile(string uploadFile)
    {

       //without # works only need solution
   }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

是的,那是因为在URI中,#片段标识符的开头.它不是路径的一部分.如果你需要它作为路径(或查询参数)的一部分,你需要将其转义为%23,就像你已经逃离空间一样%20.

来自RFC 3986:

因此,片段标识符不用于URI的特定于方案的处理; 相反,片段标识符在解除引用之前与URI的其余部分分开,因此片段本身内的识别信息仅由用户代理解除引用,而不管URI方案如何.

换句话说,当您发送带有片段标识符的URI的请求时,片段标识符将被剥离,并由浏览器(或发送请求的任何内容)进行后处理.因此,如果您尝试将其用作常规路径的一部分,那么这是一个大问题.