3

私は、ユーザーが私の条件に十分なアクセス権を持っている場合にのみダウンロード可能にしたいファイルがいくつかあるサイトを開発しています。

基本的に、ダウンロードリンクがオンになっているページがありますが、ダウンロードリンクは、ユーザーが正しい役割を持ち、データベース内の正しいプロパティに関連付けられている場合にのみ表示およびアクティブ化されます。

私が直面している問題は、たとえば、ユーザーがwww.mysite.com/downloads/myfile.pdfにアクセスした場合に、ユーザーがファイルに直接アクセスできないようにすることです。ファイルを入手しますが、ログインしてからダウンロードできるようにしたいので、カスタムルールと規制を満たしていることを確認しました。

私はそうするつもりでしたが、権限が無効になっていると、そうすることができないと思います。

System.IO.FileInfo file = new System.IO.FileInfo(path);
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(file.FullName);
Response.End();

私の目的を達成することは可能ですか?うまくいけば、私は十分に自分自身を説明しました。

ありがとう

4

3 に答える 3

2

私はあなたが正しい道にいると確信しています。

簡単な例を次に示します。

Response.ContentType = "text/txt";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + "file.txt");
Response.Write(file.ToString());
Response.End();

----編集----他にも良いサンプルがあります:

http://www.dotnetscraps.com/dotnetscraps/post/4-ways-to-send-a-PDF-file-to-the-IE-Client-in-ASPNET-20.aspx

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.ContentType = "application/pdf";
        Response.Clear();
        Response.TransmitFile("UML.pdf");
        Response.End();
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Way 1</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Send PDF" /><br />
        <br />
        This page will refresh itself with a PDF file opened in the same instance of IE itself. 
        Users will not get prompted to Save/Open/Cancel the PDF file.</div>
    </form>
</body>
</html>
于 2012-05-15T15:38:48.533 に答える
2

はい、HTTP モジュールを使用して、大規模なアプリケーションで同じことを行いました。見る

ダウンロードファイルを別のディレクトリ(この例では「ダウンロード」ディレクトリ)に配置することで機能し、独自のweb.configを使用してアプリケーションとして実行できます。そのディレクトリで実行するように HTTP モジュールを登録すると、すべての着信要求が何らかのコード モジュールを通過し、そこで適切なアクセス許可を確認して、不正アクセスを防ぐことができます。このモジュールは、Web アプリケーションがバイパスされた場合でもセキュリティを強化するゲートキーパー メカニズムとして機能します。

マイクロソフトの記事から:

「HTTP モジュールの一般的な用途には次のようなものがあります。セキュリティ。着信要求を調べることができるため、HTTP モジュールは、要求されたページ、XML Web サービス、またはハンドラーが呼び出される前に、カスタム認証またはその他のセキュリティ チェックを実行できます。」

このアプローチの良いところは、完全に制御できることです。不正なリクエストを Web ページにリダイレクトして適切に処理したり、試行のカスタム ログを作成したり、あらゆる種類の他のことを実行したりできます。したがって、これは非常に柔軟でカスタマイズ可能なオプションです。

于 2012-05-15T15:39:01.123 に答える
0

匿名を許可する場合、ユーザーはゲストであり、ASP.NET は独自の権限で実行されます。このページでは、最小限のアクセス許可を示します。したがって、ASP.NET はファイルにアクセスしてサーバーを起動できます。私がしていることは、ファイル ID を渡してファイルを返すページを作成することです。しかし、私は使用します

Response.TransmitFile(filePath);  

ASP許可

于 2012-05-15T18:50:21.380 に答える