2011-09-09 3 views
9

Ho un'applicazione ASP.NET 4 standard. All'interno di questa applicazione ci sono anche alcuni file di rasoio (ad esempio test.cshtml). L'applicazione ASP.NET funziona tuttavia se punto il browser nel file /test (senza estensione). IIS (gestore file statico) restituisce 404.IIS restituisce 404 per file ASP.NET MVC3 (.cshtml)

La stessa applicazione e anche i file standalone .cshtml funzionano su computer locale (con IIS7.5/Win7) e un server con (IIS7.5/Win2008R2), tuttavia lo fa non funziona il server con IIS7.0/Win2008.

MVC3 è installato su entrambe le macchine, i pool di app su entrambe le macchine sono .NET 4.0 integrati.

Come funzionano i gestori .cshtml? Quando IIS decide di utilizzare il gestore file statico e quando il gestore .cshtml? Cos'altro dovrei controllare?

EDIT:

Chiarimento - non sto in realtà usando tutto il framework MVC, è proprio come plain-old ASPX o file PHP. Nessun controller, nessun percorso, nessun 'punto di vista'. Lo sto usando per uno script semplice oltre alla vecchia applicazione ASP.NET.

Penso che non si tratti di un problema di programmazione, poiché funziona su computer locale, ma piuttosto su un problema di configurazione: IIS sul server Win2008 potrebbe non essere configurato correttamente.

EDIT2:

(macchine con opere IIS7.5, unica macchina con IIS7.0 non funziona, ma non sono sicuro se si tratta di un problema di versione di IIS..)

Edit3:

Sul mio computer locale in cui opera, non ho impostare qualsiasi routing. TheCodeKing e Keith mi hanno suggerito di avere un instradamento da qualche parte. Forse sì, ma non è nella mia domanda. Potrebbe essere impostato di default da qualche parte nella configurazione di IIS.

Avete suggerimenti su dove trovare questo routing "implicito"?

edit4:

Nota: Su tutti i computer c'è HttpForbiddenHandler per *.cshtml, dal momento che non è possibile scaricare il file cshtml. E c'è anche lo TransferRequestHandler per *.. (Entrambi sono abilitati.)

EDIT5:

Ho trovato che sui server, in cui si sta lavorando, ho bisogno di avere qualsiasi tipo di file .cshtml nella web root. Se rimuovo lo .cshtml dalla web root e provo a richiamarne uno da una sottodirectory, non funzionerà.

EDIT6:

ho provato che su altre due macchine: una con IIS 7.5 e un altro con IIS 7.0. Su IIS 7.5 funziona (installazione semplice senza configurazione), ma su IIS 7.0 non funziona.

Come farlo funzionare su IIS 7.0?

+0

Non sono sicuro di aver capito. In MVC, si chiama un metodo controller tramite il motore di route, utilizzando alcuni URL nella forma di [http: // mydomain/mycontroller/mycontrollermethod] (http: // mycontroller/mycontrollermethod) o somesuch. Il metodo del controller richiama la vista cshtml appropriata. Perché vorresti aprire la vista direttamente? –

+0

Vedi anche http://stackoverflow.com/questions/4942634/asp-net-mvc-razor-how-to-directly-access-cshtml-page –

+0

Poiché non è una 'vista' per una tipica applicazione MVC, ma piuttosto una semplice sceneggiatura. –

risposta

6

Yay! Dopo diversi giorni di lotte l'ho trovato! :))

Un modo per farlo funzionare su IIS 7.0 è quello di consentire runAllManagedModulesForAllRequests:

<modules runAllManagedModulesForAllRequests="true" /> 

(Anche se, su IIS 7.5 funziona anche con il valore predefinito runAllManagedModulesForAllRequests="false")

.

Non chiedermi perché :) Forse qualcuno può spiegarlo.

+1

Sì, si spiega anche qui :) http://www.west-wind.com/weblog/posts/2011/Mar/27/ASPNET-Routing- non-working-on-IIS-70 – tugberk

+0

+1 Thx, lo sapevo prima :) –

0

Sei sicuro che IIS disponga di autorizzazioni sufficienti per accedere al file nella directory/test?

Ciò potrebbe causare alcuni problemi stupidi come ho trovato.

+0

/test non è una directory. Dovrebbe invocare test.cshtml. Inoltre restituirebbe 403 (non 404). –

0

Se si tratta di un'applicazione Web asp.net 4.0, sarà necessario impostare manualmente le route, creare i controller appropriati e assicurarsi che le viste (file .cshtml) esistano effettivamente in/Views/ControllerName folder.

Si consiglia inoltre di impostare il progetto per l'utilizzo di IISExpress nell'ambiente di sviluppo in modo che corrisponda maggiormente al server Web. È di grande aiuto quando eseguo il debug di questo tipo di problemi.

+0

Non ho bisogno di impostare percorsi, controller, né di avere una cartella Views. Posso usare il file .cshtml come un vecchio file .aspx o php. –

+0

@Keith che imposta l'ambiente di sviluppo per utilizzare IIS Express non corrisponde al server web. Stai eseguendo IIS sul tuo server web - NOT IIS Express –

+0

@DaveBlack Questo commento era di 6 anni fa quando VS2010 era di gran moda e Cassini era l'impostazione predefinita. Un sacco di problemi (come con web.config) che non sono stati trovati su Cassini, ma erano sul server di produzione IIS, erano MOLTO più probabilità di essere replicati in IIS Express. – Keith

0

Poiché non si utilizza MVC, è necessario impostare il routing o riscrivere utilizzando il modulo di riscrittura IIS per attendere /test da risolvere in /test.cshtml. Non otterrai questo comportamento senza di esso.

ad es. qualcosa di simile all'avvio dell'applicazione.

routes.MapPageRoute(
    "extension-less paths", 
    "{view}", 
    "~/{view}.cshtml" 
); 
+0

Perché funziona senza routing sul mio computer locale e su un'altra macchina, dov'è lo stesso codice (applicazione ASP.NET e pochi script .cshtml autonomi)? (Solo un server ha 404 problemi.) –

+0

Quindi hai impostato il routing? Come stai mappando gli URL senza estensione a '.cshtml'? Forse potresti mostrare del codice? Quali versioni di IIS funzionano, quali no? Sono tutti uguali? – TheCodeKing

+0

Nessun routing. Prova a creare una semplice applicazione ASP.NET in IIS in un file place test.cshtml (ad esempio, metti "hi" all'interno). Puntare il browser su quel file (senza estensione .cshtml). –

5

Non sono sicuro se questo è il vostro problema particolare, ma suona come ASP.NET Web Pages non è in esecuzione (MVC 3 e fino dipende dalle pagine web per Razor e altre cose). A volte le cose possono essere installate in ordini che rovinano alcune configurazioni di ASP.NET e IIS, che a loro volta potrebbero far sì che le Pagine Web non siano in esecuzione e nessun file cshtml venga eseguito.

Prova a eseguire aspnet_regiis/i per pulire tutto.

+0

Le pagine Web ASP.NET comuni funzionano correttamente. Di sicuro, ho eseguito 'aspnet_regiss/i' (per .NET 4), ma non aiuta (dato che registra solo ASP.NET, ho anche reinstallato ASP.NET MVC3. –

+1

In particolare' C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319> aspnet_regiis -i' – cusman

1

C'è un aggiornamento rapido per IIS7.0 disponibili presso: http://support.microsoft.com/kb/980368

ho installato oggi su Windows 2008 SP2 (che richiede un riavvio del sistema operativo). Il comportamento in IIS 7.0 è ora simile a IIS 7.5

E 'risolto il problema sul mio lato/senza forzare:

<modules runAllManagedModulesForAllRequests="true" /> 

Questo è un approccio migliore che correre tutti i moduli per qualsiasi richiesta (anche su css/images/...) che causerebbe inutili sovraccarico.

+0

Grazie per l'informazione. Non ho più Windows Server 2008 con IIS 7.0, quindi qualcun altro deve confermarlo. –

0

cshtml può funzionare, se si imposta un web.conf.

si può pensare che è un html ma con la sintassi rasoio.