如何对时间段进行URL编码?

cho*_*bo2 26 c# urlencode url-encoding

我需要对某些句点进行URL编码,因为我必须传递一些文档路径,就像这样

http://example.com/test.aspx?document=test.docx
Run Code Online (Sandbox Code Playgroud)

因此test.docx导致我出现非法字符错误.所以我需要改变它

.  -->  %2E
Run Code Online (Sandbox Code Playgroud)

我试图使用Server.UrlEncode

  string b = Server.UrlEncode("http://example.com/test.aspx?document=test.docx");
Run Code Online (Sandbox Code Playgroud)

但我明白了

"http%3a%2f%2fexample.com%2ftest.aspx%3fdocument%3dtest.docx"
Run Code Online (Sandbox Code Playgroud)

那么我是否必须像字符串替换一样使用并手动执行并用该代码替换所有句点?

And*_*son 32

这是一个非常古老的问题,但我遇到了类似的问题.我在我的网址的末尾加了一个"/",其中包含了句号,它解决了问题.

  • 惊人的。-- 这对我使用 Web API 很有用。——我只能摇头。DX (2认同)
  • 只是给任何将使用这个答案的人一个注释。这适用于大多数用例,包括提供的一个 OP。如果 URL 以点字符结尾,则这**不起作用**。 (2认同)

Joh*_*ren 19

那段时间没有他的问题(假设%2E没有解决问题).句点是一个完全有效的URL字符,无论问题是什么,它都不是句号.检查正在抛出的错误的堆栈跟踪或发布完整的错误详细信息.

而且您不应该对整个路径进行URL编码.只有查询字符串参数.

string b = "http://example.com/test.aspx?document=" + Server.UrlEncode("test.docx");
Run Code Online (Sandbox Code Playgroud)

如果你这样试试,你仍然会收到错误吗?

我不会用十英尺的杆子碰到SharePoint.但是,逃避这段时间并不一定会阻止SharePoint做它的诡计.但我想你至少应该尝试一下.

Server.UrlEncode("test.docx").Replace(".", "%2E");
Run Code Online (Sandbox Code Playgroud)

  • 那么sharepoint 不喜欢它。我认为在查询字符串或任何使用 url 路径的一部分来查找根文件夹并且不能包含句点的任何内容中。来自极限测试的 %2E 似乎修复了它。 (2认同)
  • 祝你好运,@Tod1d?我在使用非常相似的 ASP.NET Web API url 时遇到了同样的问题。 (2认同)