允许IIS通过ASP.NET管道提供选定的静态文件

时间:2014-08-06 08:40:32

标签: asp.net-mvc iis

在我的项目中,我们根据请求的域更改一个图像。当然我们可以提供不同的文件(css,js,html),但更容易处理这个文件并为用户提供正确的文件(让我们称之为logo.ico

在web.config中,我们设置了<modules runAllManagedModulesForAllRequests="false">,这导致IIS为我们提供所有静态文件。

有没有办法为`logo.ico'文件添加例外?

示例清楚:当浏览器请求http://mydomian.com/logo.ico时,我想运行自定义处理程序。对于每个其他文件,我想使用IIS本机解决方案(这意味着<modules runAllManagedModulesForAllRequests="false">

1 个答案:

答案 0 :(得分:0)

无法仅为一个文件添加异常,但您可以使用ashx处理程序提供该图像,例如url应该看起来像(添加您自己的逻辑以选择图像)

http://mydomian.com/ServeImage.ashx?image=logo.ico

然后只为该域提供图标:

  public class ServeImage : IHttpHandler
  {

    public void ProcessRequest(HttpContext context)
    {
      context.Response.ContentType = "image/x-icon";
      using (var fs = new FileStream(context.Server.MapPath("~/App_Data/logo.ico"), FileMode.Open))
      {
        fs.CopyTo(context.Response.OutputStream);
      }      
    }


    public bool IsReusable
    {
      get
      {
        return false;
      }
    }
  }