我正在尝试删除使用azure存储的mvc 3应用程序中的blob。
我正在尝试将要删除的blob的Uri传递给控制器,但是会抛出错误:
A potentially dangerous Request.Path value was detected from the client (:)
我认为这是来自Uri的https:
部分,我需要解析它,但我不知道该怎么做。我想知道如何解决这个错误。
是否有更优雅的方法从存储中删除blob?
答案 0 :(得分:1)
您必须正确对网址进行网址编码。以下是编码错误的网址示例:
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的路径部分中使用特殊字符,您可能会发现following blog post有用。
答案 1 :(得分:1)
如果您希望不安全的内容通过,那么您可以将[ValidateInput(false)]
添加到您的操作中 - 但是,这会为您的安全开放一些内容 - 所以只有在您确定自己的代码时才这样做安全 - 请参阅A potentially dangerous Request.Form value was detected from the client
答案 2 :(得分:0)
我能够修复它并且我想总结解决方案,因为它需要来自其他两个答案的位和主要来自Scott Hanselman Blog post.
的位你需要做一些事情来完成这项工作:
将[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并打开你的应用程序是一个坏主意,以便你这样做。