2015-11-13 7 views
5

Ich habe zwei identische Aufrufe an ASP.NET, der einzige Unterschied ist der User-Agent. Ich habe Fiddler benutzt, um das Problem zu reproduzieren.Unzulässige Zeichen im Pfad abhängig vom User-Agent?

Der HTTP-Request-Leitung ist:

PUT http://localhost/API/es/us/havana/club/tickets/JiWOUUMxukGVWwVXQnjgfw%7C%7C214 HTTP/1.1 

Arbeiten mit:

User-Agent: Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2307.2 Safari/537.36 

mit Fails:

User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4 

Alles andere ist zu 100% gleich.

+0

Wie funktioniert es nicht? Was ist der zurückgegebene Statuscode? Irgendwelche Fehlerverfolgung auf Serverseite? – fiddler

+0

Serverfehler in Anwendung '/ API'. Unzulässige Zeichen im Pfad. ArgumentException: Unzulässige Zeichen im Pfad.] System.IO.Path.CheckInvalidPathChars (String path, Boolean checkAdditional) +13766780 System.IO.Path.GetExtension (Zeichenfolge) +28 System.Web.WebPages.DefaultDisplayMode.TransformPath (String virtualPath, String Suffix) +49 System.Web.WebPages.DefaultDisplayMode.GetDisplayInfo (Httpcontextbase Httpcontext, String virtualPath, Func'2 virtualPathExists) +33 System.Web.WebPages.DisplayModeProvider.GetDisplayInfoForVirtualPath (String virtualPath, Httpcontextbase, .. – user2105237

+0

Lassen Sie mich klarstellen, dass das Problem scheint nicht mit Fiddler verwandt zu sein. Ich habe nur Fiddler verwendet, um die Anrufe zu verfolgen. – user2105237

Antwort

3

In meinem Fall war die Ursache die MVC MultipleViews und DisplayMode-Anbieter. Dadurch können MVC-Apps gerätespezifische Ansichten auf magische Weise aufnehmen. z.B. custom.cshtml customer.mobile.cshtml

Dieser Artikel eine gute Erklärung der Funktionalität als auch hat, wie im Detail, wie es deaktivieren: https://msdn.microsoft.com/en-us/magazine/dn342866.aspx

ich dieses Problem behoben, indem Microsoft.AspNet.WebPages Paket hinzugefügt mein Projekt und einen Aufruf an diesen Code in meiner Startliste hinzufügen (Application_Start in global.asax oder bei Verwendung von OWIN, die Methode decordated w/OwinStartup Attribut):

public static void RegisterDisplayModes() 
{ 
    // MVC has handy helper to find device-specfic views. Ain't no body got  time for that. 
    dynamic modeDesktop = new DefaultDisplayMode("") { ContextCondition = (c => { return true; }) }; 
    dynamic displayModes = DisplayModeProvider.Instance.Modes; 
    displayModes.Clear(); 
    displayModes.Add(modeDesktop); 
}