Domanda

Ho cercato un basso e ancora non riesce a trovare una risposta definitiva.

Come si configura IIS 7.0 o di un'applicazione Web in IIS in modo che ASP.NET Runtime gestirà tutti - le richieste? Compresi quelli ai file statici, come *.js, *.gif, etc

Quello che sto cercando di fare è la seguente.

Abbiamo tipo di sito SaaSy, che siamo in grado di "marchio" per ogni cliente. "Branding" mediante lo sviluppo di una pagina master personalizzata e utilizzando un mucchio di *.css e altre immagini.

Abbastanza naturalmente, sto usando VirtualPathProvider, che opera in questo modo:

public override System.Web.Hosting.VirtualFile GetFile(string virtualPath)
{
    if(PhysicalFileExists(virtualPath))
    {
        var virtualFile = base.GetFile(virtualPath);
        return virtualFile;
    }

    if(VirtualFileExists(virtualPath))
    {
        var brandedVirtualPath = GetBrandedVirtualPath(virtualPath);
        var absolutePath = HttpContext.Current.Server.MapPath(brandedVirtualPath);

        Trace.WriteLine(string.Format("Serving '{0}' from '{1}'", 
            brandedVirtualPath, absolutePath), "BrandingAwareVirtualPathProvider");

        var virtualFile = new VirtualFile(brandedVirtualPath, absolutePath);
        return virtualFile;    
    }

    return null;
}

L'idea di base è la seguente: abbiamo una cartella branding all'interno della nostra webapp, che a sua volta contiene le cartelle per ogni "marca", con "marchio" essere uguale al nome host. Vale a dire, le richieste ai http://foo.example.com/ dovrebbero usare file statici da branding/foo_example_com, mentre http://bar.example.com/ dovrebbe utilizzare i contenuti da branding/bar_example_com.

Ora quello che voglio IIS da fare è quello di inoltrare tutte le richieste a file statici a StaticFileHandler, che sarebbe quindi utilizzare tutta questa "infrastruttura" e servire file corretti. Tuttavia, per quanto ci provi, non riesco a configurare IIS per farlo.

È stato utile?

Soluzione

II7 fa già che se Managed Pipeline Mode del pool di applicazioni è impostata su Integrated che è il default. In modalità integrata, ASP.NET gestisce tutte le richieste, compresi quelli per gli oggetti statici.

Se si deve lasciare il vostro pool di applicazioni in Classic Mode allora avete bisogno di utilizzare le stesse tecniche che si usa in IIS 6 per creare in modo esplicito i gestori per le varie estensioni statiche.

Informazioni aggiuntive sulla base dei commenti : Penso che il tuo pezzo mancante è la creazione di un HttpHandler per gestire gli altri interni (js, css, ecc). Senza questo, quindi ASP.NET utilizzerà il trattamento per questi tipi di file di default. Si potrebbe creare un riferimento a voi handler nel web.config. Questo articolo è un esempio di creazione di un HttpHandler per i file statici.

Altri suggerimenti

Complimenti a tutti, ma il problema era nello spazio completamente diverso.

VirtualPathProvider non può essere utilizzato in un sito web pre-compilato. Sono furioso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top