在MVC 3中删除Azure Blob

时间:2011-07-19 00:41:01

标签: asp.net-mvc asp.net-mvc-3 azure azure-storage azure-storage-blobs

我正在尝试删除使用azure存储的mvc 3应用程序中的blob。

我正在尝试将要删除的blob的Uri传递给控制器​​,但是会抛出错误:

A potentially dangerous Request.Path value was detected from the client (:)

我认为这是来自Uri的https:部分,我需要解析它,但我不知道该怎么做。我想知道如何解决这个错误。

是否有更优雅的方法从存储中删除blob?

3 个答案:

答案 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并打开你的应用程序是一个坏主意,以便你这样做。