Für unser Tool Zeta Uploader habe ich virtuelle Datenräume umgesetzt.
Dabei habe ich die Upload-Komponente Backload zusammen mit dem BlueImp jQuery File Upload eingesetzt.
In meiner Entwicklungsumgebung lokal lief alles. Auf dem Testserver (Windows 2012 R2) kam immer Fehlermeldungen.
Es sah so aus, als ob keine Datei hochgeladen wurde.
Analyse
Ich habe zunächst das Server-Tracing aktiviert (geht erst mit der kommerziellen Version von Backload) und dort dann festgestellt, dass immer GET
-Requests ankamen, und keine POST
-Requests wie lokal in meiner Umgebung.
Weiter in den Developer Tools von Google Chrome habe ich festgestellt, dass er die URL von der Upload-Controller-Action korrekt aufruft aber dann einen Redirect 301 erhält.
Ursache
Ursache ist, dass ich im Projekt das NuGet-Paket LowercaseRoutesMVC4 nutze. Das sorgt dafür, dass alle Buchstaben in der Basis-URL in Kleinbuchstaben umgewandelt werden.
Und genau so war es auch bei der Upload-Action-URL:
- Ich schreibe im Quelltext die URL mit einigen Großbuchstaben.
- Die Anfrage geht korrekt via
POST
zum Server. - Der Server sagt „301“.
- An die neue URL wird nicht mehr mit
POST
sondern mitGET
gesendet.
Das bringt dann alles durcheinander.
Lösung
Die Lösung war, dass ich die URL schlicht und einfach in Kleinbuchstaben in meinen Quelltext geschrieben habe:
var url = '@Url.Content((@"~/Backload/FileHandler?objectContext=" + @unique).ToLowerInvariant())';
So trivial und 6 Stunden Fehlersuche .