MVC4 Bundles returns 404
本文关键字:returns Bundles MVC4 | 更新日期: 2023-09-27 18:03:58
我有一个项目,当你从visual studio内运行它与捆绑工作。但是,在进行部署之后,绑定处理程序似乎永远不会选择路由。它最终会转到静态文件处理程序,该处理程序返回404响应。
任何想法?我在IIS下网站的bin里看到了优化程序集。
使用4.0应用程序池和集成模式。
我想知道是否有人有任何想法或建议?
感谢-----基于问题的更新-----
VS2012
targetFramework = " 4.5 ">
还在视图中添加了一些代码来显示加载了哪些模块,我可以看到这里列出的bundle模块。bundlecconfig是使用Internet Application MVC4项目模板时提供的默认配置。
站点正在被部署到根目录。这是奇怪的,当我设置EnableOptimizations = true(由于通过visual studio F5在调试模式下运行),它工作完美!我可以导航到content/css,它会显示出合并后的css。
我把它部署过来,其他的都工作了,除了捆绑!
我刚刚碰到(并解决了)这个问题。
确保bundle的虚拟路径不会与现有目录或实际文件名混淆。在我的例子中,我将其编码为:
bundles.Add(new ScriptBundle("~/bundles/main.js").Include( ...
但是当我把它改成
bundles.Add(new ScriptBundle("~/bundles/main").Include( ...
一切开始运转
2013年11月17日更新答案这是因为默认的MVC路由只处理*而不是*。*,即IIS或IIS Express的applicationhost。配置有如下内容:
<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.aspxASP。. NET MVC Url路由支持(点)
旧的错误答案:基本上,当IIS解析url时,通常不允许在虚拟路径中使用DOT。这个链接提到了以下URLScan AllowDotInPath参数:默认情况下,该选项设置为0。如果此选项设置为0,URLScan拒绝包含多个句点(.)的任何请求。这可以防止通过在URL的路径信息或查询字符串部分中放置安全的文件扩展名来伪装对危险文件扩展名的请求。例如,如果将此选项设置为1,URLScan可能会允许对http://servername/BadFile.exe/SafeFile.htm的请求,因为它将其解释为对HTML页面的请求,而实际上它是对PATH_INFO区域中具有HTML页面名称的可执行文件(.exe)的请求。当此选项设置为0时,URLScan还可以拒绝对包含句点的目录的请求。
我也得到了同样的错误。在网页的<system.webServer>
下添加<modules runAllManagedModulesForAllRequests="true" />
。
我有同样的问题,甚至与样本MVC应用程序。我看到默认模板捆绑的样式表与css名称,我猜IIS不喜欢导致404错误。
将bundle名称从css更改为APPCSS将为我解决问题。