2012-02-07 9 views
26

Ho un sito asp.net mvc 3 e lo pubblico in iis 7.5 (framework 4.0) e il problema è che il css e gli script non funzionano utilizzano il log degli utenti nel sito web. Quindi:Css e Script non funzionano finché l'utente non accede al sito Web - Sito Web di Asp.NET MVC 3

  • Il sito Web è stato creato come directory virtuale e convertito in un'applicazione.
  • La modalità è autenticazione moduli.
  • Abilito in i i moduli e autenticazione anonima.

La configurazione web ha:

<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: le DLL che aggiungo nella directory bin: System.Web.Helpers.dll, System.Web.Mvc.dll, System.Web. Routing.dll, System.Web.WebPages.dll.

Ho provato a cambiare il percorso nella localizzazione come "~/Contenuto", ma ho ottenuto lo stesso risultato.

ho cercato di mettere il tag consentire nel tag Autorization come:

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

ma ho ottenuto lo stesso risultato.

Cosa mi manca?

+0

Hai provato a utilizzare questo tag di autorizzazione nelle pagine di contenuto/script ?:

+0

Non ha funzionato. =/ –

risposta

48

L'ho capito. È stato qualcosa che mi è mancato dalla mia lista di controllo quando ho configurato una nuova applicazione IIS: selezionare l'applicazione, fare doppio clic su "Autenticazione", selezionare "Autenticazione anonima", quindi Modifica e cambiarla per utilizzare l'identità del pool di applicazioni. Assicurati che l'utente abbia i permessi sulla cartella che contiene il sito come hanno detto gli altri.

+0

Grazie mille! – darren

+0

grazie per rispondere alla tua stessa domanda su questo grande problema :) "la tua lista di controllo" è un "/" ToDo "di oficial/ms o dove posso ottenere maggiori informazioni su cose sulla pubblicazione del sito web? grazie mille ancora! – FabianSilva

+0

Grazie infinite per questo, ho configurato molti server e siti e non mi sono imbattuto in questo prima ma lo avevo oggi con il server di un cliente. Mi ha costretto per una buona ora fino a quando ho trovato il tuo post. Saluti. – Paul

4

Ho avuto questo problema e non è l'autorizzazione asp.net che è il problema sono i diritti per i file nel filesystem.

È necessario assicurarsi che il sito Web venga eseguito con un account che ha accesso ai file. Per i miei test interni di solito faccio girare il sito web sotto il mio account ma immagino che non sarebbe una buona idea di sicurezza se lo ospitiate in pubblico. Puoi impostarlo in Impostazioni avanzate -> Credenziali del percorso fisico per il sito web.

+0

Tutti gli utenti della macchina hanno accesso fisico al percorso del sito web. –

+0

Ma per impostazione predefinita il sito Web non è in esecuzione come qualsiasi utente della macchina. Almeno non è stato per me. Quando nessuno è registrato nel sito web viene eseguito come utente anonimo a meno che non specifichi altrimenti –

+0

Ma, quando si inserisce "enable anonymous user" in iis e lo si imposta in web.config, non è necessario altro, non è vero? (per consentire l'accesso ad un utente anonimo) –

1

Sono d'accordo con Mikael sul fatto che potrebbero essere i diritti di accesso ai file; prova a concedere le autorizzazioni all'account Everyone e se si cura il problema: scopri quale account IIS utilizza per il pool di applicazioni che usi e fornisci le autorizzazioni.

Inoltre, se non funziona, provare a mettere i file web.config nelle cartelle Script e contenuto, solo con gli attributi authorization.

E c'è anche una piccola possibilità che tu abbia sovradimensionato il tuo Routing in qualche modo, e intercetta richieste di file reali.

+0

Ho dato i permessi a tutti e metto i file web.config all'interno degli script delle cartelle e del contenuto e nulla cambia. =/ –

+0

Qual è il tuo messaggio di errore esatto quando cerchi di accedere ai tuoi file? –

+0

Non ricevo un messaggio di errore, la pagina viene reindirizzata solo alla pagina di accesso. –

3

Prova per consentire percorso del contenuto, in cui sono memorizzati i vostri script e file 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> 
+0

Alla domanda è stata data una risposta. –

0

IUSR è in genere l'utente di default rappresentazione configurato per l'autenticazione anonima. In questo caso, mi assicurerei che IUSR abbia le autorizzazioni di lettura per le cartelle in questione.

È possibile configurare il sito in modo che utilizzi anche un altro utente, ma non sono sicuro che cambierei semplicemente il sito per l'esecuzione come utente del pool di applicazioni. L'utente del pool di applicazioni ha spesso più autorizzazioni di quelle che l'utente anonimo avrebbe/dovrebbe avere.

2

Vedo che l'hai capito e sei felice della tua risposta.

Ho riscontrato questo problema, ma non si trattava di un problema di autenticazione del pool di app. Invece, ho solo permesso a tutti gli utenti di accedere alle posizioni dei file css/js, quindi almeno la pagina di accesso dovrebbe essere visualizzata correttamente fino a quando l'utente ha effettuato il login.

ad es. mettendo questo file web.config nella directory principale/sito/pubblico (o ovunque il vostro necessario css & file js vengono raccolti)

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

Per seguire sulla risposta accettata, è possibile aggiungere i tag all'interno del authentication posizione in modo che non sia necessario impostarlo manualmente in IIS durante la distribuzione su nuove macchine. Questo mostra solo un percorso, ma è facile copiarlo per altri percorsi come ~/Scripts, ~/Fonts o qualsiasi altro contenuto statico a cui si desidera fare riferimento.

<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> 
Problemi correlati