19

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

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

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

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

谢谢

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

VS2012

目标框架=“4.5”

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

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

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

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

4

4 回答 4

26

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

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

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

但是当我把它改成

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

这一切都开始起作用了。

于 2013-04-25T13:58:15.773 回答
13

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 支持(点)

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

于 2013-09-03T23:04:48.763 回答
5

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

于 2015-08-11T00:16:51.227 回答
0

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

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

于 2017-11-16T19:42:44.590 回答