我有一个自定义 IHttpHandler,在 web.config 中指定如下:
<httpHandlers>
<add verb="*" path="*.html" validate="true" type="PipingRedirectHandler" />
<add verb="*" path="*.htm" validate="true" type="PipingRedirectHandler" />
</httpHandlers>
在 IIS 7(在 Win 2008 R22 上)中,我添加了带有 Path:*.html/*.htm
和 executable:的处理程序映射%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
。
我还有一个虚拟目录映射到另一台机器上的 Windows 共享,别名:ClientFiles
,物理路径:\\othermachine\ClientFiles
。我将此虚拟目录设置为“连接为”域用户,该用户对共享具有完全控制访问权限(读取、写入、执行等),但有关网站、应用程序池标识、连接到物理路径的所有其他内容网站的其余部分等都是默认的(ApplicationPoolIdentity
)。
我的 IHttpHandler 可以很好地处理网站上的任何本地 html 文件,并且我在 ClientFiles 虚拟目录上的所有 css 和图像也可以完美地工作。唯一的问题是当我试图从虚拟目录中读取 html 文件时。HTTP 401 Unauthorized
尝试这样做时出现错误。
我认为这是本地 ASP.Net ISAPI 试图直接加载文件而不尊重虚拟目录的“连接为”设置,所以我将应用程序池的身份更改为具有访问权限的同一个域用户,以及所有内容似乎工作。
我是在想:
- 这是正常的吗?
- 为什么不使用虚拟目录设置中指定的用户?
- 我是否以适当的方式解决了这个问题?
我相信通过将应用程序池设置为使用域用户会稍微降低安全性,并且不希望这样做。