【问题标题】:MVC 3 Won't Serve Content files from Areas subfolderMVC 3 不会提供区域子文件夹中的内容文件
【发布时间】:2011-09-21 07:02:32
【问题描述】:

我有一个 MVC3 应用程序,它有几个区域和一个便携式区域(使用 MVCContrib)

通常,我将所有内容文件保存在 ~/Content 下,将脚本保存在 ~/Scripts 下。

但是,我正在为我网站上的另一项服务构建一个相当复杂的 web 客户端,我想在区域的文件夹结构下组织那些 javascript 和图像文件(大量图像文件和资源),看起来像这样,在 ~ /区域/WebClient

  • 内容
    • CSS
    • 字体
    • 图片
    • js
  • 控制器
  • 型号
  • 观看次数

我有一个资源聚合器控制器(我的便携式区域之一),它能够访问 CSS/JS 文件夹以提供该内容。但是,CSS 文件直接引用了图像/字体文件夹,并且所有这些链接都显示为已损坏。我对路径进行了两次和三次检查,确保一切正常,但仍然出现 404 错误。

据我所知,只要那里有静态文件,MVC3 就应该忽略路由。另外,据我所知,只有 App_* 文件夹享有特殊保护。我错过了什么?如果可以避免的话,我宁愿不将我的图像和资源与我的主应用程序混在一起。

例如:http://localhost/Areas/WebClient/Content/images/knownimage.png 将不起作用,但应该,因为它存在!

【问题讨论】:

    标签: asp.net-mvc-3 asp.net-mvc-3-areas


    【解决方案1】:

    所以在睡了一会儿之后,更重要的是,从问题中走出来,我记得 MVC 实际上确实为您提供了防止人们直接下载视图的保护,这让我想起了 Areas 文件夹中所需的 Web.config 文件。果然有一个httphandler,基本上把所有的请求都发给了FileNotFound handler。

    我所要做的就是将 web.config 文件放入我想要公开的内容文件夹中,并使用以下内容:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>  
      <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />
        <handlers>
          <remove name="BlockViewHandler" />     
        </handlers>
      </system.webServer>
    </configuration>
    

    问题解决了。

    【讨论】:

    • 我在使用 MVC4 和 IIS 8 的 Portable Areas 中遇到了同样的问题。我尝试删除 BlockViewHandler(甚至是全局性的!),但在尝试访问内部的 css 文件时仍然得到 404.0便携区。有什么想法吗?
    • 很好...我使用了一个“位置”元素将它保存在我的主 web.config 中,这也很有效。
    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多