【问题标题】:Using forward slashes ('/') in URI templates without encoding在不编码的 URI 模板中使用正斜杠 ('/')
【发布时间】:2011-10-26 20:43:37
【问题描述】:

我有一个用作文件存储的 RESTful WCF 服务。由于可以有任意数量的目录和子目录,我试图让用户通过简单地将文件路径放入 URL 来访问它们。有没有一种方法可以在不需要用户对斜杠进行编码的情况下做到这一点?

例如,我想要的是一个Files/{path} 的URI 模板,可以像http://localhost:8000/Files/folder1/subfolder2/subfolder3/file.jpg 一样访问。

【问题讨论】:

  • “编码斜线”是什么意思?你能否提供一个例子:1)如果用户必须编码,他应该写什么,2)你想让他写什么,3)你想通过阅读用户输入得到什么结果。
  • 对斜杠进行编码是必要的,因为否则服务会将斜杠解释为 URI 的一部分,而不是参数的一部分。对于前者,它将返回 404,因为它无法找到匹配的 URI 模板。使用编码,上面的示例 URL 将如下所示:http://localhost:8000/Files%2Ffolder1%2Fsubfolder2%2Fsubfolder3%2Ffile.jpg

标签: c# wcf rest uri


【解决方案1】:

您可以在 uri 模板的末尾添加一个 *。在您的操作中,您可以将与 * 匹配的 uri 的其余部分解释为您的文件路径。

【讨论】:

  • 我将我的 URI 从 Files/{path} 更改为 Files/{*path},现在它工作正常。谢谢!
【解决方案2】:

您需要使用 URL 重写技术来完成此操作。如果使用 .net 4 使用路由表。

【讨论】:

    【解决方案3】:

    恐怕理解不正确。下面的工作吗?

    • 让用户在path 变量中输入类似folder1/subfolder2/subfolder3/file.jpg 的内容。
    • 执行:String encodedPath = path.Replace("/", "%2F");

    【讨论】:

    • 这可行,但其想法是让用户无需对斜杠进行编码即可访问文件。这使得 URL 更清晰,访问更容易(即通过浏览器的地址栏直接链接)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2012-07-13
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    相关资源
    最近更新 更多