Поместите конфиденциальные файлы вне корня веб-сайта, чтобы они не могли быть доступны по URL-адресу.
После этого используйте это HttpHandler
(записано в VB.NET) для обслуживания файлов:
Public NotInheritable Class FileHandler
Implements IHttpHandler
Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
Get
Return False
End Get
End Property
Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
If Not String.IsNullOrEmpty(context.Request.QueryString("FileName")) Then
Dim fileName As String = context.Request.QueryString("FileName")
Try
Dim filesPath As String = "D:\TheFiles\"
Dim fileInfo As New IO.FileInfo(filesPath & fileName)
If fileInfo.Exists Then
Dim fileExt As String = fileInfo.Extension.Remove(0, 1).ToUpperInvariant
If fileExt = "JPG" Then
context.Response.ContentType = "image/jpeg"
Else
context.Response.ContentType = "image/" & fileExt
End If
context.Response.TransmitFile(fileInfo.FullName)
End If
Catch ex As Exception
End Try
End If
End Sub
End Class
и зарегистрируйте этот обработчик в вашем файле web.config следующим образом:
<httpHandlers>
<add verb="*" path="secfile.axd" type="MyApp.FileHandler, MyApp" validate="false"/>
</httpHandlers>
используйте так:
<a href="secfile.axd?pic=sample.jpg" />
Помните добавьте свой типы файлов для обработчика и изменения response.contenttype
по типу вашего файла.
Использование обработчика - не единственный способ , вы можете использовать context.Response.TransmitFile(fileInfo.FullName)
в своем файле aspx.