2015-12-08 3 views
0

Некоторые изображения нашего сайта являются «частными» и should only be served to authenticated and authorized users.Обслуживание «частных» изображений с помощью защищенного ChildAction

Таким образом, они находятся в /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

ChildActionOnly означает, что действие может быть вызвано только через Html.Action. Поскольку вы не можете загрузить изображение таким образом, оно никогда не будет работать. Если вы хотите защищен действие, то все, что вам нужно, это Authorize атрибут:

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

UPDATE

Я думаю, я понимаю, что вы имеете в виду прямо сейчас. Вы говорите, что хотите только загрузить его на страницу, но не хотите, чтобы кто-то мог скопировать href и загрузить его в отдельном окне или вкладке? Это верно? Если это так, то, к сожалению, это просто невозможно. Запрос - это запрос, независимо от того, выполняется ли он через HTML на вашей странице или вручную через пользователя, и нет никакой разницы.

+0

Да У меня есть авторизация на уровне класса, я отредактирую Q. Но это гарантирует, что несанкционированные пользователи не смогут получить доступ к изображению. Но, к сожалению, авторизованные пользователи могут перейти к нему напрямую. –

+1

См. Обновление выше. –

+0

Что касается обновления, то я боялся этого. Я полагаю, что единственный способ справиться с этим вариантом использования - обернуть изображение в частичном представлении и контролировать, когда/как его визуализировать. Но это слишком много в моем случае. –

Смежные вопросы