1

我在Windows Server 2008 R2上的IIS 7.5中託管了一個MVC3 Web應用程序。該網站位於Windows身份驗證的後面;訪問該網站時會顯示登錄提示。然後使用Forms Authentication進行二級登錄。 (該點是向公衆隱瞞了現場,等..)資源不總是下載在IIS 7.5託管的MVC3應用程序中

如果我去到現場,通過Windows身份驗證的登錄提示,然後查看登錄頁面(Forms身份驗證),某些資源可能會或可能不加載。例如,CSS文件或JavaScript文件可能無法加載。如果我點擊刷新(有時需要幾次),丟失的文件會加載好。如果我繼續刷新,我可以一遍又一遍地重現這個錯誤。有時候所有的資源都被加載,而其他的時間則不是。

  • 如果我刪除了Windows身份驗證部分,問題就消失了 - 網站每次加載完美。
  • 我不認爲這可能是一個權限問題,因爲資源有時會正確加載 。
  • 它似乎不是一個緩存問題,因爲它發生在清空我的瀏覽器緩存之前和之後。
  • 這不是一個瀏覽器特定的問題,因爲我已經在IE和Chrome中複製它。

編輯1:當我認爲這是明顯缺失,在Chrome中的資源,我看到的不是我期待的CSS或JavaScript內容,則返回登錄頁面。

編輯2:我已經啓用了對Css,Images和JavaScript文件夾的匿名訪問,當然這可以解決問題。我仍然想知道爲什麼內容有時會出現,有時甚至沒有。

編輯3: Web.config如下。請注意,我通過將[Authorize]添加到控制器或操作來確保某些操作。其他一切都應該「開放」。

<?xml version="1.0"?> 

<configuration> 
    <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 

    <appSettings ... /> 

    <connectionStrings ... /> 

    <system.net> 
     <mailSettings> 
      <smtp ... /> 
     </mailSettings> 
    </system.net> 

    <system.web> 
     <customErrors mode="Off"/> 

     <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.Helpers, Version=1.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=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
       <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
       <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
      </assemblies> 
     </compilation> 

     <authentication mode="Forms"> 
      <forms loginUrl="~/Account/Login" timeout="2880"/> 
     </authentication> 
    </system.web> 

    <system.webServer> 
     <defaultDocument enabled="true"> 
      <files> 
       <clear /> 
       <add value="Index"/> 
      </files> 
     </defaultDocument> 

     <validation validateIntegratedModeConfiguration="true"/> 
     <modules runAllManagedModulesForAllRequests="true"/> 
    </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-2.0.0.0" newVersion="3.0.0.0" /> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 

    <log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <appender name="FileAppender" type="log4net.Appender.RollingFileAppender"> 
      <file value="..\Logs\Web.txt"/> 
      <appendToFile value="true"/> 
      <rollingStyle value="Size"/> 
      <maxSizeRollBackups value="10"/> 
      <maximumFileSize value="10MB"/> 
      <layout type="log4net.Layout.SimpleLayout"/> 
     </appender> 

     <root> 
      <level value="ALL"/> 
      <appender-ref ref="FileAppender"/> 
     </root> 
    </log4net> 
</configuration> 
+0

您是否檢查過您從服務器獲取的回覆?例如。使用Fiddler或Firebug查看您在這些請求上獲得的HTTP狀態代碼。 –

+0

是的,已添加到上面的**編輯**中。 –

+0

在您看到返回登錄頁面而不是靜態資源,這意味着您已經超過了第一個屏障,即Windows身份驗證部分。因此,您的ASP.NET MVC應用程序本身似乎通過將用戶重定向到登錄頁面來保護對這些資源的訪問。但是,如果您禁用Windows身份驗證部分,則無法解釋其原因。真的需要看到Fiddler的實際請求和響應來進一步診斷它。 –

回答

0

由於它有時起作用,當它通過身份驗證後可能會起作用嗎? 當請求失敗時,請驗證您是否已通過身份驗證,因此您至少可以排除此問題

+0

沒有。如果我登錄(Windows身份驗證),則下一頁可能會顯示或不顯示正確。從這一點刷新會產生正確下載/顯示的頁面以及不正確的下載/顯示頁面 - 無論是否能夠下載所有資源,似乎都是隨機的。 –

相關問題