0

我需要和这个人一样的东西:

http://forums.asp.net/t/1507682.aspx

问题是他标记为正确的答案对我不起作用。我正在使用即将迁移到 MVC4 和 Windows Server 2012 的 ASP.NET MVC3。由于安全问题,我想防止直接访问某些图像。我现在担心的不是图像窃取保护,我阅读了几篇关于如何做到这一点的文章。

如果链接在我的页面上是这样的

<img src="/Content/Images/img1.jpg" />

应该显示图像,但如果直接访问则不会显示:

http://mywebsite.com/Content/Images/img1.jpg

由于我们正在谈论图像和访问它的几个人,因此考虑性能问题的解决方案将是我要走的路。

关于如何实施的任何想法?

谢谢。

4

2 回答 2

3

编写一个从磁盘/数据库读取图像并渲染它的 Action 方法。在该操作方法中,您可以检查用户是否被授权并返回适当的图像或“未授权”图像。

public class ProductController : Controller
{
  public ActionResult Photo(string id)
  {
   // TO DO:  get image using the unique id passed and render it
  }
}

您可以使用此操作方法的路径作为您的图像路径。

<img src="@Url.Action("Photo","Product")/someUniqueIDOfPhotoFromYourDB" />

与直接从磁盘提供图像相比,这种方法会对性能产生轻微影响。

于 2013-04-01T15:16:10.703 回答
3

您可能想在 MVC 之外思考并在 IIS 本身中处理热链接。IIS 有工具(referer (sic) 标头)来确定图像请求是否似乎来自您的站点内部。

于 2013-04-01T15:26:27.187 回答