C# 更改StaticFileHandler的文件根目录

C# 更改StaticFileHandler的文件根目录,c#,asp.net,staticfilehandler,C#,Asp.net,Staticfilehandler,我有一个ASP.NET web项目,它(除其他外)提供一些静态文件。默认情况下,框架假定所有文件路径都与web项目的位置相关。但是,我希望从Web.config中的自定义设置加载实际根目录(例如“C:\MyStaticFiles\”) 有没有办法更改StaticFileHandler认为是服务器根目录的内容? 如果没有,是否有一种简单的方法来实现IHttpHandler,从而进行此更改并将其余工作交给常规的StaticFileHandler?我认为,出于性能原因,为静态资源创建不同的路径映射不是

我有一个ASP.NET web项目,它(除其他外)提供一些静态文件。默认情况下,框架假定所有文件路径都与web项目的位置相关。但是,我希望从Web.config中的自定义设置加载实际根目录(例如
“C:\MyStaticFiles\”

有没有办法更改
StaticFileHandler
认为是服务器根目录的内容?
如果没有,是否有一种简单的方法来实现
IHttpHandler
,从而进行此更改并将其余工作交给常规的
StaticFileHandler

我认为,出于性能原因,为静态资源创建不同的路径映射不是一个好主意。如果位于web站点文件夹中,则IIS可以直接为其提供服务,而无需任何ASP.NET处理。

出于性能原因,最好使用URL重写,而不是与HttpHandler混淆。StaticFileHandler不如IIS快。您自己的处理程序将比StaticFileHandler慢10倍,除非您是一名非常非常优秀的工程师,否则它可能会泄漏(或错误地占用)内存


您可以在HttpModule或HttpApplication的BeginRequest事件(或PostAuthorizeEvent,如果您使用URL授权)中调用context.RewritePath对所选文件类型进行重写。

如何使用URL重写来更改提供文件的根文件夹?此文件夹位于web项目文件夹之外
context.RewritePath
仍然采用虚拟路径——如果您尝试为其指定绝对路径,则会抛出错误。是否有类似的东西可以让我更改绝对物理路径?否,您必须将IIS虚拟文件夹配置为物理路径,然后使用“重写路径”将IIS指向该路径。对不起,我忘了提那件事。