我们网站的某些图片是“私有”和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]
属性。但是当我这样做时,它无法加载。
如何向私人用户提供这些图片,但是请求无法访问?
答案 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还是通过用户手动完成,都没有区别。