2016-03-22 11 views
2

Wir verschieben ein ASP.NET-Projekt von IIS6 (Windows Server 2003) zu IIS 8.5 (Windows Server 2012 R2). Das Projekt hat einige MVC-Komponenten, für die das folgende Routing verwendet wird.Schrägstrichproblem in IIS 8.5

routes.MapRoute("simple", "{controller}.mvc/{action}/{id}"); 
routes.MapRoute(
       "Default", 
       "{controller}.mvc/{action}/{id}"        
       new { controller = "Home", action = "Index", id = "" } 
      ); 

So zu MyDemoController nennen würde

nun von MyDemo.mvc zugegriffen werden, was passiert, wenn ich die URL als MyDemo.mvc/es funktioniert, aber wenn ich MyDemo.mvc ohne slash es löst 404 Fehler aus.

Dies geschieht nur auf dem bereitgestellten Server. In unseren lokalen Rechnern, die IIS7.5, Win7 verwenden, funktioniert es ohne irgendwelche Probleme.

Manuelles Ändern ist nicht möglich, da viele URLs zur Sitemap-Datei hinzugefügt wurden und unser Client den Ansatz nicht genehmigt.

Ist es etwas Spezifisches für die IIS-Version oder irgendeine kleine Optimierung würde das Problem lösen?

+0

die 'simple' und' default' Strecken sind die gleichen, aber die einfache hat keine festgelegt Standardwerte. – Nkosi

+0

@nkosi das ist, was ich sah, sah seltsam aus, aber das ist der genaue Code, den ich dort gefunden – SamGhatak

+0

Wenn Sie das einfache entfernen. 'MyDemo.mvc' sollte funktionieren, vorausgesetzt, Sie haben einen' MyDemoController' mit einer 'Index'-Aktion – Nkosi

Antwort

2

Werfen Sie einen Blick auf Folgendes. Ich glaube, das ist dein Problem. Es hat mit der .mvc Erweiterung zu tun.

ASP.NET MVC - Routing - an action with file extension

Dots in URL causes 404 with ASP.NET mvc and IIS

Das Problem ist, dass IIS die .mvc Datei als eine statische Datei und wird nicht standardmäßig Route die hypothetische .mvc Datei durch Ihre MVC Anwendung behandeln. IIS verarbeitet die Anforderung, und Ihr MVC-Code erhält nie eine Änderung, um zu dieser Datei zu routen.

Zusammengefasst ist hier, was die Konfiguration aussieht .mvc Dateien arbeiten lassen:

<system.webServer> 
    <handlers> 
    <add name="MVCFileHandler" 
     path="*.mvc" 
     verb="GET" type="System.Web.Handlers.TransferRequestHandler" 
     preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" /> 
    </handlers> 
</system.webServer> 

Was es auf IIS7.5 arbeiten, Win 7 ohne Probleme und IIS nicht 8,5.

werfen Sie einen Blick auf diese Antwort

Routing a url with extension in MVC4 won't work, tries to serve up static file

Es gibt auch <modules runAllManagedModulesForAllRequests="true"> aber es nicht für MVC4/IIS8 zu funktionieren scheint (früher war ok in MVC3/IIS7 IIRC) . Weitere Informationen here. Es gibt auch eine Auswirkung auf die Leistung, da jede Anforderung durch die verwaltete Pipeline geleitet wird.

Hoffnung all dies hilft

+0

Ich habe es behoben, indem Sie den Handler über IIS hinzufügen. Eine benutzerdefinierte Handler in HandlerMappings mit IsapiModule und aspnet_isapi.dll hinzugefügt ... Danke für Ihre Hilfe @ Nkosi, .. wirklich geschätzt :) – SamGhatak

Verwandte Themen