代码之家  ›  专栏  ›  技术社区  ›  Freewalker

MVC路由没有处理我的一个目录

  •  4
  • Freewalker  · 技术社区  · 16 年前

    我正在将ASP.NET MVC与IIS 7.0结合使用。通过我的应用程序“错误覆盖”,我可以很好地连接404个错误。

    除了“控制器”、“模型”、“助手”等之外,我还有一个名为“文件”的目录,用于存储用户上载的文件。当我去 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/controllers http://www.mysite.com/helpers ,这两个目录都有代码文件,我得到一个404页,这是我想要的。我不希望用户知道我的目录结构。

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

    1 回复  |  直到 16 年前
        1
  •  2
  •   Freewalker    16 年前

    我想出来了。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>