フォルダーをルートの外に移動するか、App_Data などの保護されたフォルダーに配置して、直接参照できないようにします。次に、ユーザーを認証してファイルを提供できる「ハンドラー」ページを作成します。ハンドラーのコードは次のようになります。
@{
WebSecurity.RequireAuthenticatedUser();
var file = Request["file"];
if(Path.GetFileExtension(file).Equals(".pdf")){
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=" + file);
Response.WriteFile(Server.MapPath("~/App_Data/PDF/" + file);
}
}
ページでは、標準のリンクを提供するだけで済みますが、このリンクhref
はハンドラーとクエリ文字列に追加されたファイル名を指している必要があります。
<a href="~/handler.cshtml?file=myPdf.pdf">Click to download</a>