2011-12-12 51 views
11

我无法获取脚本文件加载到我的网站上。其他一切正常。但我没有尝试ScriptResource.axd。找不到WebResource.axd

我已经验证此问题存在于cassini和IIS7上。

我已验证我的64位4.0 web.config包含WebResource.axd的映射。

我的系统时间正确(我听说可能有问题)。

我已经验证它可以在其他项目中使用,所以罪魁祸首必须是我的web应用程序。

我的web应用程序是4.0 MVC3 web应用程序。

我的web.config可以找到here

这个错误是在杀我!任何帮助,将不胜感激!

Resource not found

回答

5

你的web.config文件是惊人的(这不是恭维):在.NET Framework 4.0中,它应该是更短/轻。
我认为你的处理程序是在错误的部分声明:

<system.webServer> 
    <handlers> 
     <add name="WebResource" path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" /> 
    </handlers> 
</system.webServer> 

通常情况下,WebResource.axd处理中“的System.Web”部分宣称:

<system.web> 
    <httpHandlers> 
     <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" /> 
    </httpHandlers> 
</system.web> 
+0

我让他们在这两个地方在一次与无济于事。我甚至不需要他们,看他们如何已经在我的machine.config(web.config)。 –

+2

你是对的:这种说法通常是不需要的。由于您使用的是MVC,您是否检查路由与WebResource.axd路径不冲突?我不使用MVC,但我知道路由有时会非常棘手,并导致意外的行为。 – CedX

+0

它具有Ignore .axd条目。 –

4

我解决了类似的问题通过为Everyone添加读取权限到包含嵌入资源的程序集所在的文件夹。很明显,每个人都是过度的,但这可能会帮助其他人研究类似的问题。

在我们的例子中加载了一些资源(所以我知道AssemblyResourceLoader正在工作),它在一台机器上工作,但不是另一台机器。

This answer到另一个问题帮助我确定哪些程序集不工作。

3

我解决了一个生产机器在这个问题上再次aspnet_regiis运行:

%WINDIR%\Microsoft .NET\Framework\4.xxxx\aspnet_regiis -i 

大概的框架4的标准安装出了问题。

3

有点晚,但可能帮助别人的未来...

我发现,如果你正在提供的Web应用程序的DLL比当前日期时间更新的会发生这种情况。例如,您将Web应用程序放在服务器时间早于开发计算机上的生产服务器上。

获取服务器时间同步与开发机的伎俩我...

0

我有一把umbraco这个问题个.axd在生产服务器上,它让我抓狂,直到我发现服务器具有不同的安全性,并且在请求过滤,扩展名.axd和。asmx在默认情况下未在允许的文件名中列出,并且托管公司的设置为允许未列出的文件扩展名关闭,这与我的开发计算机不同。

4

绝对的解决方案是:http://www.4guysfromrolla.com/articles/080906-1.aspx 当你检查.NET框架代码:https://github.com/Microsoft/referencesource/blob/master/System.Web/Handlers/AssemblyResourceLoader.cs 可以看到招:线606

WebResourceAttribute wra = FindWebResourceAttribute(assembly, resourceName); 

如果大会没有WebResourceAttribute它抛出404错误。 您可以在该行看到

if (resourceStream == null) { 
      if (resourceIdentifierPresent) { 
       LogWebResourceFailure(decryptedData, exception); 
      } 
      throw new HttpException(404, SR.GetString(SR.AssemblyResourceLoader_InvalidRequest)); 
     } 

所以WebResourceAttribute添加到您的AssemblyInfo.cs文件是这样的:

[assembly: WebResource("FullNameSpace.SampleResourceFile.js", "text/javascript")]