ASP.NET MVC 2& IIS:HTTP 500.24 favicon.ico错误

时间:2010-11-10 21:58:15

标签: iis asp.net-mvc-2 httprequest fiddler favicon

我的ASP.NET MVC 2应用程序有一些奇怪的行为。

我正在使用IIS 7.5,Windows身份验证和ASP.NET模拟来加载我的网页。

经过多次搜索,我没有找到一个很好的方法来摆脱每次加载页面时我不断上传的500.24请求(根目录下的favicon.ico触发了这个):

Fiddler

我查看了一些文章,例如this onethat one,但这似乎无法解决我的问题。我需要这些设置才能使我的应用程序在这里工作:.NET 4 Framework集成模式管道,Windows身份验证和ASP.NET模拟。

这是我的web.config的简化版本,如果它可以帮助任何人(当然,出于安全原因我删除了连接字符串..)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <customErrors mode="Off" />
    <identity impersonate="true" />
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add assembly="System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>
    </compilation>
    <authentication mode="Windows">
      <!-- roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" / -->
      <!-- forms loginUrl="~/Account/LogOn" timeout="2880" / -->
    </authentication>
    <membership>
      <providers>
        <clear />
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/Globe" />
      </providers>
    </membership>
    <profile>
      <providers>
        <clear />
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/Globe" />
      </providers>
    </profile>
    <roleManager enabled="false">
      <providers>
        <clear />
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/Globe" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/Globe" />
      </providers>
    </roleManager>
    <pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-UA-Compatible" value="IE=edge" />
      </customHeaders>
    </httpProtocol>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
    </modules>
    <security>
      <requestFiltering>
        <verbs>
          <add verb="PUT" allowed="true" />
          <add verb="DELETE" allowed="true" />
        </verbs>
      </requestFiltering>
    </security>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  </system.serviceModel>
</configuration>

我的应用程序正在运行,favicon.ico正在加载,我只是想知道为什么它会在每个请求上触发500.24(当然,也许是Fiddler无法验证自身并导致de 500.24 HTTP错误,但是当它正常时会触发401.2 - 未经授权而不是......)

3 个答案:

答案 0 :(得分:2)

我的猜测是,favicon.ico要么在不同的应用程序池中运行,要么在站点的根目录中存在有问题的web.config。 所以: 1)检查站点的根目录(/ favicon.ico所在的目录)是否包含web.config。如果是,则检查它是否正在设置system.web / httpModule,或httpHandler,或system.web / identity(impersonate)或类似的东西,并且应用程序池正在以集成模式运行。

因此,您需要做的是删除有问题的httpmodule / httphandler / impersonate设置,或者将应用程序池更改为经典运行,或者添加您的站点包含的相同配置&lt; validation validateIntegratedModeConfiguration =“false”/ &GT;

答案 1 :(得分:0)

CarlosAg所说的话。廉价修复可能是将图标移动到冒犯的应用程序而不是咆哮树。

答案 2 :(得分:0)

我确实找到了我的问题的答案=)

你肯定会嘲笑我.. = P

嗯,部分答案是CarlosAg指出的C:\ inetpub \ wwwroot中的<validation validateIntegratedModeConfiguration="false" />,但另一部分是我忘记将<link rel="icon" href="<%: Url.Content("~/favicon.ico")%>" type="image/x-icon" />添加到我的网站。我的ASP.NET MVC 2应用程序中的主文件。由于Chrome和IE确实查看了favicon.ico的根目录,它似乎可以工作,但直到现在我才注意到Firefox没有加载favicon。

现在每个浏览器都会加载favicon,并且在Fiddler中没有发送500.24 HTTP请求。

谢谢! =)