通过安全的ChildAction提供“私人”图像

时间:2015-12-08 14:52:58

标签: asp.net asp.net-mvc image

我们网站的某些图片是“私有”和should only be served to authenticated and authorized users

因此它们位于/App_Data,并通过此安全操作呈现:

//[ChildActionOnly]
[Authorize]
[HttpGet]
[Route("Image")]
public virtual FileResult Image(string path) {
  return base.File(Server.MapPath(path), "image/jpg");
}

在视图中,我<img src="@Url.Action(Image(...))">正确地提供了“私人”图片。没有公众用户可以看到它。

问题是我不希望我的经过身份验证的用户能够直接导航到它,因此我添加了[ChildActionOnly]属性。但是当我这样做时,它无法加载。

如何向私人用户提供这些图片,但是请求无法访问?

1 个答案:

答案 0 :(得分:1)

ChildActionOnly表示只能通过Html.Action调用该操作。由于您无法以这种方式加载图像,因此它永远不会起作用。如果您希望操作受到保护,那么您只需要Authorize属性:

[Authorize]
[HttpGet]
[Route("Image")]
public virtual FileResult Image(string path) {
    return base.File(Server.MapPath(path), "image/jpg");
}

<强>更新

我想我明白你的意思了。您是说您只想在页面上加载它,但是您不希望某个人能够复制href并将其加载到单独的窗口或标签中?那是对的吗?如果是这样,那么不幸的是,这根本不可能。请求是一项请求,无论是通过您网页上的HTML还是通过用户手动完成,都没有区别。