Одна из возможностей - поместить файл в папку App_Data
, к которой запрещен прямой доступ, а затем иметь общий обработчик ASHX для чтения содержимого файла и его возврата клиенту.Тогда вы можете ограничить доступ к этому универсальному обработчику только для аутентифицированных пользователей:
<%@ WebHandler Language="C#" Class="Download" %>
using System;
using System.Web;
public class Download : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "application/octet-stream";
context.Response.WriteFile("~/App_Data/test.exe");
}
public bool IsReusable
{
get
{
return false;
}
}
}
, а в своем файле web.config вы ограничите доступ к обработчику Download.ashx
:
<location path="Download.ashx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>