C# MVC4束返回404

C# MVC4束返回404,c#,asp.net-mvc-4,bundle,C#,Asp.net Mvc 4,Bundle,我有一个在VisualStudio中运行捆绑的项目。但是,在部署之后,绑定处理程序似乎永远不会选择路由。它最终转到静态文件处理程序,该处理程序返回404响应 有什么想法吗?我在IIS下的网站bin中看到了优化程序集 它使用4.0应用程序池和集成模式 我想知道是否有人有什么想法或建议 谢谢 -----根据问题更新----- VS2012 targetFramework=“4.5” 我还向视图中添加了一些代码,以显示加载了哪些模块,并且可以看到其中列出的bundle模块 BundleConfig是使

我有一个在VisualStudio中运行捆绑的项目。但是,在部署之后,绑定处理程序似乎永远不会选择路由。它最终转到静态文件处理程序,该处理程序返回404响应

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

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

我想知道是否有人有什么想法或建议

谢谢

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

VS2012

targetFramework=“4.5”

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

BundleConfig是使用Internet应用程序MVC4项目模板时提供的默认设置

正在将站点部署到根目录中。奇怪的是,当我设置EnableOptimizations=true时(由于通过VisualStudioF5在调试模式下运行),它工作得非常完美!我可以导航到content/css,它会输出组合的css

我部署了它,其他一切都正常,但是捆绑

我刚刚解决了这个问题

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

bundles.Add(new ScriptBundle("~/bundles/main.js").Include( ...
但是当我把它改成

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

一切都开始起作用了。

2013年11月17日更新了答案 这是因为默认MVC路由只处理*而不是*,i、 e.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" />

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

即使我收到了相同的错误。
在web.config文件的
下添加
解决了这个问题。

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


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

可能是您的捆绑文件路径与应该的路径不同…运行时设置为4.0还是4.5?检查web.config。您使用的是VS2012或2010?考虑到我正在发布到IIS文件夹,并且其他所有内容(视图、布局、图像)都可以正常加载,我看不出路径有何错误。如果我手动引用它加载的css文件/content/site.css。但是当我点击/content/css时,bundlemodule似乎没有拦截调用并加载绑定的css内容!你的包是什么样子的?另外,您的站点是否部署到站点的根目录?这就是它应该工作的方式/css在调试模式下不工作,相反,
Styles.Render(“~/Content/css”)
在调试模式下呈现指向单个css文件的链接。这就是为什么你应该使用
style.Render()
而不是直接调用它;这意味着一个句点应该是可以的。@gerrod,最后一句话指出:当此选项设置为0时,URLScan还可能拒绝对包含句点的目录的请求。根据绑定的工作方式,它将向生成的URL添加一些生成的哈希后缀。因此,虚拟目录中似乎有一个点。因此它不会起作用。嗯,不,那还是不对。散列作为查询字符串参数追加,例如
bundles/main.js?v={hash}
。我已经试过了,你是对的,路径中有多个句点会导致URLScan拒绝请求;“但是只有一个月经是可以的。”格罗德,谢谢,你是对的,我以前的答案是错的。我已经更新了答案。再次感谢,如果您认为这是正确的,请批准答案。谢谢你好"新球",;是的,听起来更合理,谢谢你的修正!我在访问字体方面也遇到了同样的问题,对于其他解决方案,请尝试以下链接,这些链接涉及
StyleBundle
virtualpath:,,希望这对其他人有所帮助。
      <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>