配置 IIS7 通过 ASP.NET 运行时服务器静态内容

2024-01-24

我搜索了高低,仍然找不到明确的答案。

如何配置 IIS 7.0 或 IIS 中的 Web 应用程序,以便 ASP.NET 运行时能够处理all请求——包括对静态文件的请求,例如*.js, *.gif, etc?

我想做的事情如下。

我们有一种 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 来执行此操作。


如果应用程序池的Managed Pipeline Mode被设定为Integrated这是默认值。在集成模式下,ASP.NET 处理所有请求,包括静态对象的请求。

如果您必须将应用程序池留在Classic Mode那么您需要使用在 IIS 6 中使用的相同技术来显式地为各种静态扩展创建处理程序。

基于评论的附加信息:我认为你缺失的部分是创造一个HttpHandler处理其他扩展名(.js、.css 等)。如果没有这个,ASP.NET 将使用默认处理这些类型的文件。您将在 web.config 中创建对处理程序的引用。本文 http://www.wrox.com/WileyCDA/Section/id-291916.html是为静态文件创建 HttpHandler 的示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

配置 IIS7 通过 ASP.NET 运行时服务器静态内容 的相关文章

随机推荐