4

我将 ASP.NET MVC 与 IIS 7.0 一起使用。我已经通过我的 Application_Error 覆盖很好地连接了 404 错误。

除了“Controllers”、“Models”、“Helpers”等之外,我还有一个名为“Files”的目录,用于存储用户上传的文件。当我访问http://www.mysite.com/files时,我没有得到“未找到”,而是得到了一个默认的 IIS 403 页面,该页面提供了太多信息(例如服务器的确切目录结构):

HTTP Error 403.14 - Forbidden
The Web server is configured to not list the contents of this directory.

如果我尝试访问http://www.mysite.com/controllershttp://www.mysite.com/helpers,它们都是包含代码文件的现有目录,我会得到一个 404 页面,这就是我想要的。我不希望用户知道我的目录结构。

为什么 MVC 不处理 /files 目录?

4

1 回答 1

2

我想出了这个。Views 目录返回正确的“404”页面但 Files 目录返回信息过多的 ASP.NET“无权限”页面的原因:Views 目录中有一个禁止显示文件的 web.config 文件。它具有以下片段来阻止 MVC 为目录提供服务。

我刚刚在我的 Files 目录中添加了一个类似的 web.config 文件,而 MVC 现在就像该目录不存在一样,这正是我想要的。

    <httpHandlers>
      <add path="*" verb="*"
          type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>
    </handlers>
  </system.webServer>
于 2009-12-09T22:51:35.963 回答