【发布时间】:2015-07-08 16:27:40
【问题描述】:
我编写了一个 asp.net 应用程序,当找到与请求 url 匹配的文件时,它应该什么都不做,但是当文件不存在时,它会生成(基于在 url 中找到的某些信息)和然后用户被重定向到现在存在的文件(相同的 url)。我在global.asax 中使用Application_Error 实现了它,它在本地按预期工作,但在远程服务器上不起作用(它作为应用程序添加到MVC 应用程序中)。我知道问题在于 IIS 处理远程服务器上的文件请求,但我不知道如何让它不处理这些请求。我只需要 asp.net 子应用程序在它自己的范围(路径)内处理这些文件请求,但在其他地方继续使用 IIS(父 MVC 应用程序,子应用程序的路径除外)。那么我该怎么做(我在另一个 MVC 应用程序中看到过这个工作,但我不确定是什么让它工作)?
我尝试将应用程序池切换为经典应用程序池并更改 IIS 和 web.config 中的处理程序映射,但都没有成功。我还找到了有关在 asp.net 中制作看起来像静态文件的路由的信息,但据我了解,即使相应的文件存在,这些路由也会处理请求,所以这不是我所需要的。
【问题讨论】:
-
您应该使用集成模式并编写一个 HTTP 模块来处理它,而不是使用错误事件。错误事件仅针对 ASP.NET 请求,在 IIS 处理静态文件请求时不起作用。
-
您还需要为所有请求启用此托管模块。
-
@LexLi 经过大量试验和错误后,我发现最好的两个解决方案是使用
httpError页面(请参阅答案)并编写一个 http 处理程序。第一个不适用于子应用程序,所以我使用了第二个。使用 http 模块看起来是个好主意,但由于各种原因,它们不适用于静态文件。为了让它工作,我必须编写自己的静态文件处理程序,这会使模块变得多余。我们大概可以删除这个问题之前的cmets。