4

私は高低を検索しましたが、それでも明確な答えを見つけることができません。

ASP.NETランタイムが、、などの静的ファイルへの要求を含むすべての要求を処理するように、IIS 7.0またはIISでWebアプリケーションを構成するにはどうすればよいですか?*.js*.gif

私がやろうとしていることは次のとおりです。

私たちは一種のSaaSyサイトを持っており、それをすべての顧客に「ブランド化」することができます。「ブランディング」とは、カスタムマスターページを開発し、多数*.cssの画像やその他の画像を使用することを意味します。

当然のことながら、私はVirtualPathProvider次のように動作するを使用しています。

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;
}

基本的な考え方は次のとおりですbranding。Webアプリ内にフォルダーがあり、各「ブランド」のフォルダーが含まれています。「ブランド」はホスト名と同じです。つまり、リクエストはhttp://foo.example.com/からの静的ファイルを使用する必要がありますがbranding/foo_example_com、からのhttp://bar.example.com/コンテンツを使用する必要がありますbranding/bar_example_com

ここで、IISに実行させたいのは、静的ファイルへのすべての要求をに転送することですStaticFileHandler。これにより、この「インフラストラクチャ」全体が使用され、正しいファイルが提供されます。ただし、できる限り試してみてください。これを行うようにIISを構成することはできません。

4

2 に答える 2

5

II7は、アプリケーションプールがデフォルトであるManaged Pipeline Modeに設定されている場合、すでにそれを実行しIntegratedています。統合モードでは、ASP.NETは静的オブジェクトの要求を含むすべての要求を処理します。

アプリケーションプールをそのままにしてClassic Modeおく必要がある場合は、IIS 6で使用するのと同じ手法を使用して、さまざまな静的拡張機能のハンドラーを明示的に作成する必要があります。

コメントに基づく追加情報HttpHandler:不足している部分は、他の拡張子(.js、.cssなど)を処理するためのを作成していると思います。これがないと、ASP.NETはこれらの種類のファイルの既定の処理を使用します。web.configにハンドラーへの参照を作成します。この記事は、静的ファイル用のHttpHandlerを作成する例です。

于 2010-04-07T15:57:42.273 に答える
1

みんなに称賛を送りますが、問題はまったく別の場所にありました。

VirtualPathProviderコンパイル済みのWebサイトでは使用できません。私は激怒しています。

于 2010-04-08T07:45:01.600 に答える