7

私はasp.net mvc 2とvs 2008を使用しています。

フォーム認証でウェブサイトを作ろうとしています。一部のページへのアクセスを制限しようとしているときに、asp.net 管理ツールを使用しています。そこで、たとえば、Web サイト全体への匿名ユーザーへのアクセスを拒否するルールを作成します。管理ツールは、予想どおり、ルート web.config ファイルに次のセクションを追加します。

 <authorization>
   <deny users="?" />
  </authorization>

%ApplicationRoot%/View/Protected の例のように、一部のサブフォルダーで同じことを行うと、管理ツールも予想どおり、次のコードで前述のサブフォルダーに web.config ファイルを追加します。

 <configuration>
<system.web>      
    <authorization>
        <deny users="UserName" />
    </authorization>
</system.web>

これらのファイルの主な違いは、ルートの web.config 認証セクションに何らかの効果があることです (一般的に言えば、計画どおりに機能します - Web サイト全体からすべての認証されていないユーザーを拒否します)。ただし、サブフォルダー web.config 承認セクションはまったく効果がありません。コードに従って、ルート構成ファイルに追加されていることがわかりました

 <location path="Protected">
  <authorization>
    <deny users="UserName" />
   </authorization>
 </location>

計画どおり、%ApplicationRoot%/View/Protected Folder にあるすべてのビューへの %UserName% アクセスを拒否します。
この動作は cassini と iis と似ています。私は両方を試しました。

主な問題は、作業を行うために親切な管理ツールが必要なことです。そのため、問題について何か助けを求めています - web.config がサブフォルダーにあるときに認証セクションが機能しないのはなぜですか?

PSサブフォルダーの web.config の間<authorization>と中に間違ったコードを配置しようとしました:</authorization>

  <authorization>
    asdfg
   </authorization>

無効。おそらく何らかの問題により、セクション全体が無視されますか?

PPS 同じファイルの承認セクションからのコードが正しくないと、エラーが発生します

4

1 に答える 1

7

問題は、アプリケーションが従来の ASP.NET Web フォーム アプリケーションではないことです。あなたがしようとしていることは、Web フォームでは完全に機能しますが、MVC では機能しません。

MVC の世界では、ブラウザーがページ /People/SmartList を要求したときに、プロジェクトの /People/SmartList.cshtml が表示されるとは限りません。実際、あなたのプロジェクトは /People/ フォルダーをまったく持つことができませんでした。MVC エンジンによって表示されるビュー (.cshtml ファイル) は、ルートによって決定されます。そして、その MVC ルーティング エンジンは、.cshtml ファイルにアクセスするときに、web.config ファイルをまったく調べません。これで、web.conig ファイルが無視される理由がわかります。

ただし、承認を行うことはできます。web.config ファイルを使用する代わりに、[Authorize]属性を使用して、適切なコントローラーのアクション メソッド、またはコントローラー クラス全体に適用する必要があります。

[Authorize(Users="UserName")]
public ActionResult ShowRestrictedData()
    ...
于 2012-11-09T14:19:15.143 に答える