IIS 7 kann keine ASPX-Seiten bereitstellen, funktioniert aber mit Standarddateien

IIS 7 kann keine ASPX-Seiten bereitstellen, funktioniert aber mit Standarddateien

Ich habe eine ASP.NET 4-Website auf IIS 7 unter Windows Server 2008 bereitgestellt. Wenn ich zum Stammordner oder einem anderen Ordner auf der Site navigiere, antwortet der Server, indem er Default.aspxwie erwartet die Standardseite liefert. Wenn ich jedoch eine bestimmte Seite mit einer Erweiterung anfordere .aspx, erhalte ich einen 404-Fehler.

Wenn ich beispielsweise Folgendes anfordere:

http://localhost/MyWeb/

Der Server liefert erfolgreich http://localhost/MyWeb/Default.aspx. Wenn ich jedoch explizit anfordere:

http://localhost/MyWeb/Default.aspx

dann antwortet IIS mit einem 404-Fehler.

Die Fehlerdetails lauten wie folgt:

Module: IIS Web Core
Notification: MapRequestHandler
Handler: StaticFile
Error code: 0x80070002

Das .NET-Framework ist offensichtlich installiert und funktioniert, da ich auf die Standardseiten zugreifen kann. Übrigens habe ich beobachtet, dass, wenn der Server ausfällt und eine 404-Fehlerseite anzeigt, die von mir eingegebene URL (z. B. http://localhost/MyWeb/Default.aspx) die Erweiterung entfernt (und lautet http://localhost/MyWeb/Default).

Ich habe versucht, aspnet_iisreg -iden Server auszuführen und neu zu starten, aber es hat sich nichts geändert.

Was fehlt mir? Danke.

UPDATE. Ich poste hier die web.configmeiner Site. Es gibt keine anderen Konfigurationsdateien, die darauf zutreffen.

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>

  <appSettings>
    <add key="DatabaseServer" value="CONWAY\SQLEXPRESS"/>
    <add key="DatabaseName" value="KaleidoScape"/>
    <add key="User" value="KaleidoScapeUser"/>
    <add key="Password" value="Scape1!"/>
  </appSettings>

  <system.web>

    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" />

    <pages>
      <namespaces>
        <add namespace="System.Web.Optimization" />
      </namespaces>
      <controls>
        <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" />
        <add tagPrefix="uc" tagName="FileGallery" src="~/Controls/FileGallery/FileGallery.ascx" />
      </controls>
    </pages>

    <authentication mode="Forms">
      <forms defaultUrl="~/App" loginUrl="~/Default.aspx" slidingExpiration="true" timeout="120" name="Incipit.KaleidoScape" />
    </authentication>

    <authorization>
      <allow users="*" />
    </authorization>

  </system.web>

  <location path="App">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" culture="neutral" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>      
    </assemblyBinding>
  </runtime>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</configuration>

AKTUALISIEREN. Die IIS-Protokolleinträge für eine fehlgeschlagene Anforderung lauten wie folgt:

2016-10-23 21:13:22 127.0.0.1 GET /MyWeb/MyPage.aspx - 80 - 127.0.0.1 Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.0;+WOW64;+Trident/5.0) 301 0 0 46
2016-10-23 21:13:22 127.0.0.1 GET /MyWeb/MyPage - 80 - 127.0.0.1 Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.0;+WOW64;+Trident/5.0) 404 0 2 0

Beachten Sie, dass es zwei Einträge gibt. Der erste entspricht MyPage.aspx, also der Seite, die ich durch Eingabe in das URL-Feld angefordert habe. Dies führt zu einem 301-Fehler (dauerhaft verschoben). Unmittelbar danach gibt es einen Eintrag für dieselbe Seite ohne die .aspxErweiterung, was zu einem 404-Fehler mit Unterstatus 0 führt. Ich verstehe nicht, warum die vollständige URL eine 301 erhält und warum der Server dann versucht, eine Seite ohne die Erweiterung zu liefern (und dies scheitert).

UPDATE. Ich habe gerade ein interessantes Experiment durchgeführt. Ich habe auf meinem Server eine neue Webanwendung mit einer einzigen Test.aspxDatei erstellt. Sie funktionierte wie erwartet, d. h. der Server liefert die Seite, wenn Sie sie explizit anfordern. Dann habe ich alle Inhalte von der Website kopiert, die mir Kopfschmerzen bereitet, und sie Test.aspxfunktionierte nicht mehr! Dann habe ich alles außer der Test.aspxDatei von dieser Website gelöscht, und sie funktionierte nicht mehr, sondern blieb erfolglos. Zusammenfassend lässt sich sagen, dass es etwas im Webinhalt gibt, das alles durcheinander bringt und das auch nach dem Löschen des Inhalts bestehen bleibt. Dies ist eine Website, die ich mit Visual Studio 2015 erstellt habe, indem ich eine Projektvorlage verwendet habe, die mit Bootstrap und einigen anderen Dingen geliefert wird. Ich bin völlig verwirrt.

Antwort1

Nach langer Recherche habe ich eine Lösung dafür gefunden. Ich sollte sagen, dass ich weiß, wie man das Problem behebt, aber ich bin mir immer noch nicht sicher, warum das Problem auftritt.

Das Problem hängt mit dem Mechanismus für „freundliche URLs“ zusammen, der in IIS 7 verfügbar ist. Ich habe ihn deaktiviert, indem ich den Code geändert habe App_Start\RouteConfig.cs:

var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);

Zu:

var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Off;
routes.EnableFriendlyUrls(settings);

Damit ist das Problem behoben. Soweit ich weiß, geht es bei benutzerfreundlichen URLs darum, Dateierweiterungen wegzulassen, und ich vermute, dass das der Grund ist, warum ich jedes Mal, wenn ich eine Seite anfordere, den 301-Fehler und einen anschließenden Versuch für eine Datei ohne Erweiterung erhalte. Ich weiß jedoch nicht, warum IIS die Datei nicht bereitstellen kann.

Wie auch immer, es ist jetzt behoben. Vielen Dank an alle, die bei der Diagnose des Problems geholfen haben.

verwandte Informationen