IIS 7 liefert keine ASPX-Seiten, funktioniert jedoch mit Standarddateien

1457
CesarGon

Ich habe eine ASP.NET 4-Website für IIS 7 unter Windows Server 2008 bereitgestellt. Wenn ich zum Stammordner oder zu einem anderen Ordner auf der Website browse, antwortet der Server mit der Default.aspxerwarteten Standardseite . Wenn ich jedoch eine bestimmte Seite mit einer .aspxErweiterung anfrage, erhalte ich einen 404-Fehler.

Wenn ich zum Beispiel frage:

http://localhost/MyWeb/ 

Der Server liefert erfolgreich http://localhost/MyWeb/Default.aspx. Wenn ich jedoch ausdrücklich fordere:

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 Standardseiten zugreifen kann. Ich habe übrigens beobachtet, dass, wenn der Server ausfällt und eine 404-Fehlerseite anzeigt, die von mir eingegebene URL (wie http://localhost/MyWeb/Default.aspx) die Erweiterung löscht (und liest http://localhost/MyWeb/Default).

Ich habe versucht, aspnet_iisreg -iden Server auszuführen und neu zu starten, aber die Dinge haben sich nicht geändert.

Was vermisse ich? Vielen Dank.

AKTUALISIEREN. Ich poste hier die web.configvon meiner Seite. 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. Die erste entspricht derjenigen MyPage.aspx, die ich durch Eingabe in das URL-Feld angefordert habe. Dies führt zu einem Fehler 301 (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 versucht, zu liefern (und fehlschlägt). eine Seite ohne Erweiterung.

AKTUALISIEREN. Ich habe gerade ein interessantes Experiment durchgeführt. Ich habe auf meinem Server eine neue Webanwendung mit einer einzigen Test.aspxDatei erstellt. Es hat wie erwartet funktioniert, dh der Server liefert die Seite, wenn Sie sie explizit anfordern. Dann kopierte ich alle Inhalte von der Website, die mir Kopfschmerzen bereitet, und Test.aspxhörte auf zu arbeiten! Dann löschte ich alles aus diesem Web mit Ausnahme der Test.aspxDatei, und es funktionierte nicht mehr, aber es blieb aus. Zusammenfassend ist festzuhalten, dass der Webinhalt etwas enthält, was Probleme verursacht und nach dem Löschen des Inhalts bestehen bleibt. Dies ist eine Website, die ich mit Visual Studio 2015 mit einer Projektvorlage erstellt habe, die mit Bootstrap und einigen anderen Dingen geliefert wird. Ich bin völlig verwirrt.

3
Sie haben wahrscheinlich auch "Handler: StaticFile" bemerkt, was falsch wäre. Falls es den Leuten beim Debuggen hilft: Was ist, wenn Sie eine einfache HTML-Datei mit dem Namen "Default" (ohne Erweiterung) zum Dateisystem hinzufügen? Arjan vor 7 Jahren 0
@Arjan: Ja, ich weiß, dass StaticFile falsch ist. Irgendwie verarbeitet der Server ASPX-Dateien nicht ordnungsgemäß. Aber ich weiß nicht warum. CesarGon vor 7 Jahren 0
Wird also eine Datei mit dem Namen "Default" bereitgestellt, wenn sie existiert, wenn explizit "http: // localhost / MyWeb / Default.aspx" angefordert wird? _ "Irgendwie verarbeitet der Server ASPX-Dateien nicht ordnungsgemäß" _ - oder er wird vor dem Versuch zur Nicht-ASPX-Erweiterungsversion umgeleitet. Arjan vor 7 Jahren 0
Der Server gibt immer noch den Fehler 404 aus. CesarGon vor 7 Jahren 0
Haben Sie ASP.NET für localhost oder nur für MyWeb konfiguriert? harrymc vor 7 Jahren 0
@ harrymc: ASP.NET wurde seit Ewigkeiten auf dem Server installiert. Andere Websites auf diesem Computer funktionieren einwandfrei. Nur diese Website schlägt fehl. CesarGon vor 7 Jahren 0
Hat diese Website eine eigene web.config? Können Sie die Konfigurationsdateien veröffentlichen, die möglicherweise auf der Website zutreffen? harrymc vor 7 Jahren 0
Es gibt nur eine web.config, die sich auf die Site auswirkt. Ich habe es jetzt dem OP hinzugefügt. Mach dir keine Sorgen über die Zeugnisse dort; sie sind gefälscht ;-) CesarGon vor 7 Jahren 0
Enthält die `Default.aspx'-Datei einen ausführbaren Code? (Oder ist es nur reines HTML? In diesem Fall: Fügen Sie Code hinzu und prüfen Sie, ob er analysiert wurde.) Haben andere Websites ein ``Definiert für die Erweiterung` .aspx`? Arjan vor 7 Jahren 0
Default.aspx hat Code, und es wird analysiert und ausgeführt, wenn es als Standarddatei bereitgestellt wird (dh, wenn ein Ordner angefordert wird). Es wird jedoch nicht analysiert oder ausgeführt, wenn ein Fehler 404 angezeigt wird. CesarGon vor 7 Jahren 0
Fügen Sie das Feld "sc-substatus" zum IIS-Protokoll hinzu, um zwischen etwa 20 verschiedenen [404-Variationen] zu unterscheiden (https: //support.microsoft.comAdd%20/en-us/kb/943891). Prüfen Sie, was für diese eine Website auf dem Server anders ist, z. B. zusätzliche Konfiguration, Handler, Anwendungspools, Ordnerberechtigungen usw. harrymc vor 7 Jahren 0
@ harrymc: Ich poste die Protokolleinträge für einen 404-Fehler. CesarGon vor 7 Jahren 0
Hmmm, mit den neuen Protokollen verstehe ich nicht, warum eine Datei `Default` ohne Erweiterung nicht angefordert wird, wenn` Default.aspx` angefordert wird, da '301' eine explizite Weiterleitung vorschlägt und die nächste Zeile zeigt, dass der Browser tatsächlich ist versuchen, das zu holen. Wie dem auch sei: Die Weiterleitung zur URL ohne das Suffix `.aspx` ist der Täter, der nicht in der` web.config` konfiguriert ist, sondern irgendwo in den ISS-Einstellbildschirmen, schätze ich? Arjan vor 7 Jahren 0
Die HTTP-Umleitung ist, soweit ich sehen kann, deaktiviert. CesarGon vor 7 Jahren 0
Wird `default.aspx` zur Liste der Standarddateien hinzugefügt? Burgi vor 7 Jahren 0
Ja bitte. Oben. CesarGon vor 7 Jahren 0
Ich habe jetzt ein drittes Update zu einem gerade durchgeführten Experiment hinzugefügt. Sehr komisch. Ich gehe bis morgen ins Bett. Danke an alle, die geholfen haben. CesarGon vor 7 Jahren 0
Verwenden Sie neben ASP.NET Erweiterungen oder ISAPI-Module? Anmerkung: Wenn mit der 301-Antwort keine alternative URL zurückgegeben wird, wird die URL-Umleitung normalerweise falsch eingerichtet. Erstellt der ASP.NET-Code dieser Website irgendwie eine CONFIG-Datei oder fügt Umleitungs- / Umschreiberegeln hinzu (siehe IIS-Manager)? harrymc vor 7 Jahren 0
Soweit ich weiß, verwende ich keine ISAPI-Module oder Erweiterungen von Drittanbietern. Der ASP.NET-Code auf der Website ist ziemlich normal: Er verwendet Bootstrap und ein paar Javascript-Abhängigkeiten, aber das ist alles. Ich habe andere ähnliche Websites, die gut funktionieren. CesarGon vor 7 Jahren 0
Das Problem tritt anscheinend auf, nachdem die Website einmal ausgeführt wurde, und bleibt dann bestehen. Wenn Sie nach dieser Ausführung nichts Besonderes über diese Website finden können, z. B. im IIS-Manager oder in einer Konfigurationsdatei, ist es unwahrscheinlich, dass wir sie hier finden werden. Der einzige Rat, um das Problem zu finden, das ich geben kann, ist, von Null aus einen Neustart durchzuführen und Dateien hinzuzufügen, bis Sie die Ursache gefunden haben, und dann die Datei selektiv zu bearbeiten (jedes Mal eine neue Website starten, autsch). harrymc vor 7 Jahren 0
@ harrymc: Ich stimme deinem Rat zu. Ich werde das tun, und ich werde berichten, wann ich etwas finde. Vielen Dank für Ihre Zeit. CesarGon vor 7 Jahren 0

1 Antwort auf die Frage

2
CesarGon

Nach langen Recherchen fand ich eine Lösung dafür. Ich sollte sagen, dass ich weiß, wie ich das Problem beheben kann, aber ich bin immer noch nicht sicher, warum das Problem auftritt.

Das Problem bezieht sich auf den in IIS 7 verfügbaren Mechanismus für "befreundete URLs". Ich habe sie deaktiviert, indem ich den Code von in App_Start\RouteConfig.csgeändert habe:

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

zu:

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

Dies hat das Problem behoben. Soweit ich weiß, handelt es sich bei freundlichen URLs um das Löschen von Dateierweiterungen. Ich bekomme deshalb den Fehler 301 und einen nachfolgenden Versuch, eine Datei ohne Erweiterungen zu erstellen, wenn ich eine Seite anfrage. Ich weiß jedoch nicht, warum IIS die Datei nicht bereitstellt.

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

Für zukünftige Leser oder falls Sie das ursprüngliche Problem noch lösen möchten: Vielleicht enthalten die Routen in RouteConfig dann das Suffix .aspx? Arjan vor 7 Jahren 0
@Arjan: Ich bin mir nicht sicher, ob ich dir folge. Es werden keine Routen explizit auf der Website verwendet. CesarGon vor 7 Jahren 0
Wenn ich mir einige Beispiele anschaue, dachte ich mir, dass die RouteConfig-Datei Routen definieren würde. Na ja, für dich gelöst :-) Arjan vor 7 Jahren 2
Ich hatte also recht - dies war ein Problem mit der Weiterleitung. harrymc vor 7 Jahren 0
Ich hatte also recht - dies war ein Problem mit der Weiterleitung. ;-) Arjan vor 7 Jahren 1
Teilweise. Soweit ich sehen kann, handelt es sich hierbei um eine "Umleitung", die vom befreundeten URLs-Mechanismus verwendet wird, der scheinbar einen 301-Code "permanent verschoben" verwendet, um den Server zu zwingen, eine erweiterungslose Datei bereitzustellen. CesarGon vor 7 Jahren 0
Benutzerfreundliche URLs scheinen in der Anwendung fehlerhaft oder schlecht verwendet zu werden, da sie das Gegenteil bewirken sollen: Leiten Sie eine virtuelle URL ohne URL auf die tatsächliche URL um. harrymc vor 7 Jahren 0
@Arjan: Wir hatten also recht - das war ein Problem mit der Umleitung; =) harrymc vor 7 Jahren 0