Posso fornire file .html usando Razor come se fossero file .cshtml senza modificare l’estensione di tutte le mie pagine?

Gestisco un sito asp.net che è stato precedentemente convertito dal sito html statico in asp.net.

Per diversi motivi (principalmente SEO) abbiamo deciso di non rinominare tutti i file in .aspx quando abbiamo convertito originariamente il sito. Questo è stato molto facile da fare semplicemente aggiungendo buildProvider e httpHandler al web.config.

      

Ora sto aggiornando il sito per utilizzare Asp.net WebPages con i file cshtml di Razor. Posso rinominare tutti i file, se necessario, e usare la riscrittura dell’URL per far sì che gli URL rimangano gli stessi, tuttavia sarebbe molto più facile se potessi semplicemente configurare il web.config per dirgli di analizzare i file .html come se fossero .cshtml .

Ho cercato un bel po ‘e non ho trovato nulla di equivalente a PageHandlerFactory per le pagine del razor. Sembra come se fosse solo un meccanismo interno nel gestore ISAPI .net 4.0.

Il sito è attualmente in esecuzione su Windows 2003 Server e IIS 6. Ci sarà l’aggiornamento a 2008 / IIS 7.5 nel prossimo futuro, ma preferirei non aspettarlo.

C’è un modo per ottenere i file .html per essere analizzati dal razor come se fossero file .cshtml?

Grazie a SLaks per avermi indirizzato nella giusta direzione, ma ci sono volute ancora alcune ore di scavo nella sorgente MVC per capire la soluzione.

1 – È necessario inserire RazorBuildProvider in web.config

    

E aggiungere System.Web.WebPages.Razor agli assembly se non è già lì.

  [...]   

2 – Aggiungi 2 linee nel metodo global.asax Application_Start()

 // Requires reference to System.Web.WebPages.Razor System.Web.Razor.RazorCodeLanguage.Languages.Add( "html", new CSharpRazorCodeLanguage()); WebPageHttpHandler.RegisterExtension("html"); 

Chiama WebPageHttpHandler.RegisterExtension .

Potrebbe inoltre essere necessario registrare una WebPageRazorHostFactory personalizzata per comunicare al motore Razor cosa fare con il file; Non ne sono sicuro.

Poiché questo è stato effettivamente risolto per l’uso con VS2012 / .net 4.5. Come usare gli esempi sopra in un progetto C # 5 non ho fortuna 🙁