MVC4 Bundles返回404

时间:2013-03-13 18:42:57

标签: c# asp.net-mvc-4 bundle

我有一个项目,可以在Visual Studio中运行时使用捆绑功能。但是,在进行部署之后,捆绑处理程序似乎永远不会选择路由。它最终会转到静态文件处理程序,返回404响应。

有什么想法吗?我在IIS下的网站bin中看到了优化程序集。

它使用4.0应用程序池和集成模式。

我想知道是否有人有任何想法或建议?

由于

-----根据问题更新-----

VS2012

targetFramework = “4.5”

我还在视图中添加了一些代码,以显示加载了哪些模块,我可以看到其中列出的bundle模块。

BundleConfig是使用Internet Application MVC4项目模板时提供的默认设置。

该站点正在部署到根目录中。奇怪的是,当我设置EnableOptimizations = true时(由于通过visual studio F5在调试模式下运行),它完美无缺!我可以导航到content / css,它会吐出组合的CSS。

我将其部署,其他一切正常,但捆绑!

4 个答案:

答案 0 :(得分:25)

我刚刚遇到(并解决了)这个问题。

确保您的捆绑包的虚拟路径不会与现有目录或实际文件名混淆。就我而言,我把它编码为:

bundles.Add(new ScriptBundle("~/bundles/main.js").Include( ...

但是当我把它改成

bundles.Add(new ScriptBundle("~/bundles/main").Include( ... 

这一切都开始起作用了。

答案 1 :(得分:12)

2013年11月17日更新了答案 这是因为默认的MVC路由只处理*而不是*。 *,即IIS或IIS Express的applicationhost.config具有以下内容:

            <add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />

因此,要解决此问题,我们可以将以下内容添加到web.config:

      <system.webServer>
        <handlers>      
          <add name="UrlRoutingHandler" 
               type="System.Web.Routing.UrlRoutingHandler, 
                     System.Web, Version=4.0.0.0, 
                     Culture=neutral, 
                     PublicKeyToken=b03f5f7f11d50a3a" 
               path="/bundles/*" 
               verb="GET"/>      
        </handlers>
      </system.webServer>

有关详细信息,请参阅以下内容: http://weblogs.asp.net/owscott/archive/2013/01/16/handing-mvc-paths-with-dots-in-the-path.aspx ASP.NET MVC Url Route supporting (dot)

错误的老答案: 基本上,当IIS解析URL时,通常不允许在虚拟路径中使用DOT。 这个a Link提到了以下URLScan AllowDotInPath参数: 默认情况下,此选项设置为0.如果此选项设置为0,则URLScan将拒绝包含多个句点(。)的任何请求。这可以防止尝试通过在URL的路径信息或查询字符串部分中放置安全文件扩展名来伪装危险文件扩展名的请求。例如,如果此选项设置为1,则URLScan可能允许请求http:// servername / BadFile.exe / SafeFile.htm,因为它将其解释为对HTML页面的请求,而实际上是对HTML页面的请求可执行(.exe)文件,其中包含PATH_INFO区域中HTML页面的名称。当此选项设置为0时,URLScan也可以拒绝对包含句点的目录的请求。

答案 2 :(得分:3)

即使我得到了同样的错误。 在web.config文件中的<modules runAllManagedModulesForAllRequests="true" />下添加<system.webServer>解决了这个问题。

答案 3 :(得分:0)

即使使用示例MVC应用程序,我也遇到了同样的问题。我看到默认模板使用css名称捆绑了样式表,我猜IIS不喜欢这样会导致404错误。

将包名称从css更改为APPCSS将为我解决问题。