Frage

Ich arbeite daran, IOS 6 zu bekommen, um XmlhttTpRequest-Beiträge zu verwenden, um Bilder hochzuladen.Dies funktioniert auf Desktop- und Android-Webbrowsern, aber mit iOS 6 erhalte ich einen Fehler auf der Seite, in der er gepostet wird: "Anfordern des Körperstroms erschöpft".(Verwenden des IOS-Simulators mit dem Safari-Webinspektor).

Hier ist der grundlegende Code der Seite:

generasacodicetagpre.

Wenn Sie dies auf einem anderen Browser anführen, kehrt der Handler korrekt zurück und lädt die Datei hoch.Mit iOS hat die ASHX-Seite jedoch den Fehler "Anfordern des Körperstroms erschöpft".

Hier ist ein Screenshot des Inspektors:

Anfragen Körperstrom erschöpft

Alle Ideen?

update: Dieses Problem tritt nur auf, wenn die NTLM / Windows-Authentifizierung für die Anwendung in IIS aktiviert ist.Mit Formularen oder anonymer Authentifizierung funktioniert der Upload in Ordnung.

danke,

John

War es hilfreich?

Lösung

In iOS 6 sendet Safari die Datei mit dem anfänglichen Beitrag einschließlich der Datei.Das bedeutet, dass der Dateistrom am Ende oder "erschöpft" ist.

Mit NTLM wird jedoch eine 401-Herausforderung als Antwort erhalten und muss dann den Beitrag mit den Authentifizierungsinformationen erneut senden.Da der Dateistrom nicht zurückgesetzt wird, kann die Datei nicht erneut mit dem zweiten Beitrag gesendet werden.Sie können dies in den IIS-Protokollen sehen.

Soweit ich weiß, gibt es keinen besonders guten Weg.Ich ändere meine mobile App, sodass sie die Formularauthentifizierung verwendet.Ich leite die mobile App auf eine separate Anmelde-App auf demselben Server, mit der die Windows-Authentifizierung verwendet wird.Die Anmelde-App kann dann mit einem Formularauthentifizierungs-Cookie wieder in die Haupt-App umleiten, und alles ist wieder gut.

Sie müssen den Machine-Schlüssel auf beiden Apps in der Datei web.config einstellen, sodass beide die gleichen Tasten für die Verschlüsselung und die Validierung verwenden.

Der Code in der Login-App ist so einfach wie

generasacodicetagpre.

Andere Tipps

Ich habe das Problem gelöst, indem er nicht den selbstdefinierten HTTP-Authentifizierungskopf auf iOS 7 und iOS 8 eingestellt hat. (Zunächst verwenden unser Service den selbstdefinierten Wert für den authentifizierten Kopf).Und nachdem die Herausforderung vom Delegierten abgewickelt wurde, hat die Anforderung automatisch die Anforderung "Authentifizierung: ntlmxxx automatisch".Und der Put und die Post funktioniert wieder.

Dieser Fehler kommt auf iOS, aber Sie können einen anderen Ansatz verwenden Wie ändern Sie Ihre Codezeile in Formdata, in der Sie die Datei anpassen

generasacodicetagpre.

an der nachstehenden Zeile, die grundsätzlich nicht den Dateisteuerelement anfügt, sondern die Base64-Bilddaten

verwenden generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top