我有一個ASP.NET MVC 2 Web應用程序,可以在我的本地Cassini服務器中正常工作,並且在我最後一次測試它時也能正常工作幾個月前的IIS 7.5。IIS 8 - 靜態文件請求通過託管管道,儘管runAllManagedModulesForAllRequests =「false」
我的web.config看起來像這樣(不相關的部分去掉):
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms">
<!-- 2880 minutes is 48 hours -->
<forms loginUrl="~/Welcome/Login" timeout="2880" slidingExpiration="true" />
</authentication>
<customErrors mode="RemoteOnly" />
<httpHandlers>
<remove verb="*" path="*.asmx" />
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<remove name="ScriptModule"/>
<remove name="UrlRoutingModule"/>
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated"/>
<remove name="ScriptHandlerFactory"/>
<remove name="ScriptHandlerFactoryAppServices"/>
<remove name="ScriptResource"/>
<remove name="UrlRoutingHandler"/>
<add name="ScriptHandlerFactory" preCondition="integratedMode" verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptHandlerFactoryAppServices" preCondition="integratedMode" verb="*" path="*_AppService.axd" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</handlers>
<httpErrors>
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="Views\Shared\Iis404.htm" responseMode="File" />
</httpErrors>
</system.webServer>
</configuration>
我現在它的Azure的VM和靜態內容的請求,例如部署到IIS 8 /Styles/style.css
經歷了託管請求管道,並且由於我有一個就地認證系統,這意味着這些請求會被阻止並被我的應用程序的登錄屏幕取代。
我發現這個QA(Prevent IIS from serving static files through ASP.NET pipeline),我改變了<modules runAllManagedModulesForAllRequests="true">
到<modules runAllManagedModulesForAllRequests="false">
,但是這並沒有解決它:請求/Styles/style.css
還是造成了被調用我的ASP.NET MVC的代碼(它調用我的WelcomeController類的登錄動作,因爲現在Controller.User
屬性返回null,所以失敗)。
我不知道IIS8中會有什麼變化會引發這種情況 - 但是我怎樣才能修復它呢?
更新:
我說這對我的Global.asax.cs,但它沒有工作:
routes.IgnoreRoute("Scripts/{*pathInfo}");
routes.IgnoreRoute("Styles/{*pathInfo}");
routes.IgnoreRoute("favicon.ico");
更新:我已經在我的Windows 8筆記本電腦企業,並安裝IIS 8我的驚訝,它在那裏按預期工作 - 所以我的Windows 8筆記本電腦和Server 2012 Azure VM之間存在一些配置差異。嗯。