2011-06-21 9 views
0

コンテンツディレクトリの特定のファイルをユーザーがダウンロードできないようにするにはどうすればよいですか?MVC 3の静的コンテンツをブロックする

/ContentにWeb.configを追加する必要がありますか?既に/ Viewsにあるようにしますか?

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 

    <system.web> 
    <httpHandlers> 
     <add path="SecretFolder/*" verb="*" type="System.Web.HttpNotFoundHandler" /> 
     <add path="SecretFile.pdf" verb="*" type="System.Web.HttpNotFoundHandler" /> 
    </httpHandlers> 
    </system.web> 

</configuration> 

カスタムルーティングルールを作成する必要はありますか?

さらに良い方法がありますか?

答えて

1

これはまさに<authorization> elementがweb.configのためのものです。これにより、ユーザがどのファイルを見ることができるかをきめ細かく制御できます。あなたは必要なだけ多くのコントロールを提供することができます。

<location path="SecretFolder"> 
    <system.web> 
    <authorization> 
     <allow roles="admin" /> 
     <deny users="*" /> 
    </authorization> 
    </system.web> 
</location> 

しかし、これはあなたがあなたのコンテンツを制御のこの種を必要とする場合、私は推薦され、IPrincipalを使用してASP.NET authorizationを実装していることを前提としています。

+0

私は現在、認証設定を行っていないので、これはweb.configをドロップするよりももう少し作業になります。これが望ましいかもしれないパフォーマンス上の理由はありますか? – MikeWyatt

+1

一般的な方法として - ネット上のほとんどの読みは、あなたが持つことができるエントリの複数のポイントのため、MVCアプリケーション(Webフォームのための素晴らしい方法)の認証要素を使用することをお勧めします。はい、この場合は問題なく動作しますが、潜在的に認証の混合が開始されます。 (このメソッドは[Authorize]要素で使用することは推奨されていないため –

1

基本的には、コントローラを介してこれに接続する別のルートがないため、上記のとおりです。ファイルの種類と構造から判断すると、これは当てはまりません(懸念事項は同じファイルに2つのルートがあることです)、web.configの認証要素をMVCで使用することが推奨されます)

MVCで既に使用されているものを正確に使用したいと考えています。 (私は..あなたはすでにそれを持って知っている)で、あなたのweb.configファイルに「HttpNotFoundHandler」の統合を参照してください: http://completedevelopment.blogspot.com/2011/06/using-views-outside-of-views-or-other.html

これはあなた/ビューのフォルダの内のコンテンツは既にブロックされている方法です - 'ので、これはすでにありますmvc-ish '

関連する問題