web-dev-qa-db-ja.com

Cssとスクリプトは、ユーザーがWebサイトにログインするまで機能しません-Asp.NET MVC 3Webサイト

私はasp.netmvc 3サイトを持っていて、それをiis 7.5(framework 4.0)で公開していますが、問題は、Webサイトのユーザーログインを使用してcssとスクリプトが機能しないことです。そう:

  • Webサイトは仮想ディレクトリのように作成され、アプリケーションに変換されました。
  • モードはフォーム認証です。
  • IISフォームと匿名認証を有効にします。

Web構成には次のものがあります。

<location path="Content" allowOverride="true">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
<location path="Scripts" allowOverride="true">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
        <globalization culture="pt-BR" uiCulture="pt-BR" />
    </system.web>
</location>

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

Obs:binディレクトリに追加するdll:System.Web.Helpers.dll、System.Web.Mvc.dll、System.Web.Routing.dll、System.Web.WebPages.dll。

ローカリゼーションのパスを「〜/ Content」として変更しようとしましたが、同じ結果が得られました。

自動化タグに次のようにタグallowを入れようとしました:

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

しかし、私は同じ結果を得ました。

何が足りないのですか?

27
Vinicius Ottoni

私はそれを考え出した。新しいIISアプリケーションを設定するときにチェックリストから見逃したものでした:アプリケーションを選択し、[認証]をダブルクリックし、[匿名認証]を選択してから編集し、使用するように変更しますアプリケーションプールID。他のユーザーが言ったように、ユーザーがサイトを含むフォルダーに対するアクセス許可を持っていることを確認してください。

51
Vinicius Ottoni

私もこの問題を抱えていましたが、問題はasp.netの承認ではなく、ファイルシステム内のファイルに対する権限です。

ファイルにアクセスできるアカウントでWebサイトが実行されていることを確認する必要があります。私の内部テストでは、通常、自分のアカウントでWebサイトを実行しますが、公開でホストする場合、セキュリティ面でこれは良い考えではないと思います。これは、[詳細設定]-> [Webサイトの物理パス資格情報]で設定できます。

4
Mikael Eliasson

スクリプトとcssファイルが保存されているコンテンツパスを許可するようにしてください。

<configuration>
  <location path="content" allowOverride="true">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
  <system.web>
    <authorization>
      <allow roles="admin" />
      <deny users="?" />
    </authorization>
  </system.web>
</configuration>
3
oyaebunterkrah

あなたはそれを理解し、あなたの答えに満足しているようです。

私もこの問題を抱えていましたが、アプリプール認証の問題ではありませんでした。代わりに、すべてのユーザーにcss/jsファイルの場所へのアクセスを許可したので、少なくともユーザーがログインするまでログインページは適切にレンダリングされます。

例えばこのweb.configファイルを/ site/publicのルート(または必要なcssおよびjsファイルが収集されている場所)に配置する

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web>
    <authorization>
        <allow users="*" />
    </authorization>
  </system.web>
</configuration>
2
secretwep

私は、それがファイルアクセス権である可能性があるというMikaelに同意します。 Everyoneアカウントにアクセス許可を付与してみてください。問題が解決する場合は、使用するアプリケーションプールに使用するアカウントIISを見つけて、アクセス許可を付与してください。

また、機能しない場合は、web.configファイルをScriptsおよびContentフォルダー内に、authorization属性のみで配置してみてください。

また、何らかの方法でルーティングをオーバーチューンし、実際のファイル要求を傍受する可能性も少しあります。

1
Andrey Kuleshov

承認された回答をフォローアップするには、場所内にauthenticationタグを追加して、新しいマシンに展開するときにこれをIIS)に手動で設定する必要がないようにします。これには1つのパスしか表示されませんが、~/Scripts~/Fonts、または参照するその他の静的コンテンツなどの他のパスに簡単にコピーできます。

<location path="Content" allowOverride="true">
  <!-- Authorize all users -->
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>

  <!-- Authenticate anonymous users -->
  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication enabled="true" />
      </authentication>
    </security>
  </system.webServer>
</location>
0
Greg

IUSRは通常、匿名認証用に構成されたデフォルトの偽装ユーザーです。その場合は、IUSRに問題のフォルダーへの読み取りアクセス許可があることを確認します。

別のユーザーを使用するようにサイトを構成することもできますが、アプリケーションプールユーザーとして実行するようにサイトを切り替えるだけかどうかはわかりません。多くの場合、アプリケーションプールユーザーは、匿名ユーザーが持つ必要がある/持つべきよりも多くのアクセス許可を持っています。

0
b_levitt