Не помещайте путь изображения внутри тега изображения в качестве параметра для сценария. Это называется прямой ссылкой на объект и является плохой вещью. Рассмотрим наивную реализацию такого скрипта / страницы / контроллера, который выглядит как /image/?resource=\server\path\img.jpg.
Что произойдет, если кто-нибудь загрузит / image / resource /? Resource = c: \ windows \ system32 \ config \ SAM? Ваша база паролей будет отправлена.
Вы вообще не хотите использовать полные пути, в идеале вы хотите либо обслуживать все изображения из этого каталога, но и просто принимать имя файла, удаляя из него любую информацию о пути, выполняя что-то вроде
string filename = Path.GetFileName(userInputtedFilename);
FileInfo file = new FileInfo(Server.Path.Combine("\\Server\share\", filename)));
Это, по крайней мере, безопасно, но, конечно, пользователи могут просматривать все изображения, если они имеют подходящие названия. Еще безопаснее иметь косвенную ссылку на объект, таблицу сопоставления где-нибудь, которая сопоставляет что-то вроде GUID с фактическим именем файла и использует это в качестве параметра для вашего сценария обслуживания.
Для обслуживания файла вы возвращаете FileContentResult с вашего контроллера,
public FileContentResult GetFile(Guid indirectReference)
{
byte[] fileContents = // Resolve the file and read it from the indirect reference
mimeType = // Suitable MIME type
return File(fileContent, mimeType, fileName);
}