我正在尝试删除使用 azure 存储的 mvc 3 应用程序中的 blob。
我正在尝试将要删除的 blob 的 Uri 传递给控制器,但是会引发错误:
A potentially dangerous Request.Path value was detected from the client (:)
我认为这是来自https:
Uri 的一部分,我需要将其解析出来,但是我不知道该怎么做。我想知道如何解决这个错误。
有没有更优雅的方式从存储中删除 blob?
我正在尝试删除使用 azure 存储的 mvc 3 应用程序中的 blob。
我正在尝试将要删除的 blob 的 Uri 传递给控制器,但是会引发错误:
A potentially dangerous Request.Path value was detected from the client (:)
我认为这是来自https:
Uri 的一部分,我需要将其解析出来,但是我不知道该怎么做。我想知道如何解决这个错误。
有没有更优雅的方式从存储中删除 blob?
您必须正确地对您的网址进行 URL 编码。这是一个编码错误的 url 示例:
http://foo.com/controller/action?param=http://bar.com
它应该是这样的:
http://foo.com/controller/action?param=http%3A%2F%2Fbar.com
或者,也许您有以下形式的网址:
http://foo.com/controller/action/https://bar.com
更糟糕的是。如果您想在 URL 的路径部分使用特殊字符,您可能会发现以下博客文章很有用。
如果您希望不安全的内容通过,那么您可以添加[ValidateInput(false)]
到您的操作中 - 但是,这会为您的安全打开一些东西 - 所以只有在您确定代码是安全的情况下才这样做 - 请参阅A中的第一个答案从客户端检测到具有潜在危险的 Request.Form 值
我能够修复它并且我想总结一下解决方案,因为它需要其他两个答案中的一些内容,并且主要来自Scott Hanselman 博客文章中的一些内容。
你需要做一些事情来完成这项工作:
把[ValidateInput(false)]
你的行动方法。
确保您的 Url 已正确编码(上面的帖子中给出了一个示例),这是在您使用blobVariableName.Uri.AbsoluteUri
字符串从视图传递到控制器时完成的,因此您不必在那里做任何事情。
使您的查询字符串看起来像
http://site/controller/action?blobid=http%3A%2F%2F...
,而不是http://site/controller/action/http%3A%2F%2F...
后者不起作用!
附带说明一下,自从我开始,我们的功能需求发生了变化,现在将有关每个 blob 的信息存储在数据库中,这允许我传递 blob 的 uri 以外的参数,这似乎是一种更安全的播放方式。
很多社区似乎都同意传递 uri 并打开您的应用程序以允许您这样做是一个坏主意。