MVC4 Bundles返回404

Mik*_*ike 19 c# bundle asp.net-mvc-4

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

有任何想法吗?我在IIS下的网站bin中看到了优化程序集.

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

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

谢谢

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

VS2012

targetFramework = "4.5"

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

BundleConfig是使用Internet Application MVC4项目模板时提供的默认值.

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

我部署它,其他一切工作,但捆绑!

use*_*070 25

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

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

bundles.Add(new ScriptBundle("~/bundles/main.js").Include( ...
Run Code Online (Sandbox Code Playgroud)

但是当我改变它

bundles.Add(new ScriptBundle("~/bundles/main").Include( ... 
Run Code Online (Sandbox Code Playgroud)

一切都开始奏效了.


xin*_*qiu 13

更新于11/17/2013的答案这是由于默认的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" />
Run Code Online (Sandbox Code Playgroud)

因此,要解决它,我们可以将以下内容添加到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>
Run Code Online (Sandbox Code Playgroud)

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

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


vin*_*eel 5

甚至我也遇到了同样的错误。在 web.config 文件中添加<modules runAllManagedModulesForAllRequests="true" />under<system.webServer>解决了问题。