【问题标题】:Configure IIS7 to server static content through ASP.NET Runtime将 IIS7 配置为通过 ASP.NET 运行时服务器静态内容
【发布时间】:2011-02-05 08:11:01
【问题描述】:

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

如何在 IIS 中配置 IIS 7.0 或 Web 应用程序,以便 ASP.NET 运行时处理所有请求——包括对静态文件的请求,如*.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;
}

基本思路如下:我们的 webapp 中有一个branding 文件夹,该文件夹又包含每个“品牌”的文件夹,其中“品牌”等于主机名。也就是说,对http://foo.example.com/ 的请求应该使用来自branding/foo_example_com 的静态文件,而http://bar.example.com/ 应该使用来自branding/bar_example_com 的内容。

现在我想要 IIS 做的是将所有对静态文件的请求转发到 StaticFileHandler,然后它将使用整个“基础设施”并提供正确的文件。但是,尽我所能,我无法配置 IIS 来执行此操作。

【问题讨论】:

  • 您是否在问如何强制所有请求由 ASP.NET 请求处理程序处理,而不是 IIS 对这些类型的默认处理程序?或者如果您的 IIS 没有响应对非 ASPNET 文件的请求?你的问题有点不清楚。
  • @rwmnau 谢谢!现在更清楚了吗?
  • 确实如此 - 感谢您的编辑。

标签: asp.net iis-7 integrated-pipeline-mode static-files


【解决方案1】:

如果应用程序池的Managed Pipeline Mode 设置为默认设置Integrated,II7 已经这样做了。在集成模式下,ASP.NET 处理所有请求,包括静态对象的请求。

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

基于评论的其他信息:我认为您缺少的部分是创建一个 HttpHandler 来处理其他扩展名(.js、.css 等)。如果没有这个,那么 ASP.NET 将对这些类型的文件使用默认处理。您将在 web.config 中创建对您的处理程序的引用。 This article 是为静态文件创建 HttpHandler 的示例。

【讨论】:

  • 查看我的编辑。鉴于此,您的回答是否仍然成立?
【解决方案2】:

向所有人致敬,但问题出在完全不同的领域。

VirtualPathProvider 不能用于预编译的网站。我很生气。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2019-07-29
    • 1970-01-01
    • 2021-02-03
    相关资源
    最近更新 更多