Benutzer mit den meisten Antworten
Zeilenumbruch im Request-Stream

Frage
-
Hallo zusammen,
ich erstelle eine Multipart-Post-Request.
Hier ein kleiner Auszug (C#-Code).
sbHeader.AppendFormat("--{0}\r\n", boundary) sbHeader.AppendFormat("Content-Disposition:form-data;name=""{0}""\r\n\r\n{1}\r\n", key, value)
Der String wird in Byte umgewandelt und in den WebRequest-Stream geschrieben.
In C# funktioniert mein Code wunderbar, nur leider nicht mit VB.
Der Server zeigt mir bei C# in der Log-Datei die Zeilenumschaltungen im Request an, bei VB nicht. Ich vermute es liegt an der Zeilenschaltungen, warum es nicht funktioniert, einen anderen Unterschied zwischen den Request kann ich nicht erkennen.
Okay, \r\n durch "Environment.NewLine" ersetzt. Funktioniert auch nicht. Mein Server loggt nun den Request mit kleinen Kästchen anstatt "\r\n"
Kann mir bitte jemand helfen, hat jemand eine Idee wieso weshalb warum?
Danke
Antworten
-
Hallo,
das Feature von Escape-Sequenzen kennt der Visual Basic Compiler nicht.
Dort musst Du die Zeilenumbrücke durch Verketten einfügen.
Die Sequenz "\r\n" entspäche dabei ControlChars.CrLf:sbHeader.AppendFormat("Content-Disposition:form-data;name=""{0}""" & ControlChars.CrLf & ControlChars.CrLf & "{1}" & ControlChars.CrLf & "", key, value)
Da das schnell ziemlich unübersichtlich wird geht alternativ:
sbHeader.AppendFormat("Content-Disposition:form-data;name=""{0}""{2}{2}{1}{2}", key, value, ControlChars.CrLf)
Und im Falle eines StringBuilders kann man auch darauf verzichten:
' Ungetestet With sbHeader .AppendFormat("Content-Disposition:form-data;name=""{0}"", key) .AppendLine() .AppendLine() .AppendFormat("{0}", value) .AppendLine() End With
was zwar länger aber deutlich leichter zu lesen ist.
Wobei AppendLine Envirionment.NewLine als Zeilentrenner einfügt.Gruß Elmar
- Als Antwort vorgeschlagen Thorsten DörflerModerator Sonntag, 22. Mai 2011 20:06
- Als Antwort markiert Thorsten DörflerModerator Mittwoch, 25. Mai 2011 06:41
Alle Antworten
-
Hallo,
das Feature von Escape-Sequenzen kennt der Visual Basic Compiler nicht.
Dort musst Du die Zeilenumbrücke durch Verketten einfügen.
Die Sequenz "\r\n" entspäche dabei ControlChars.CrLf:sbHeader.AppendFormat("Content-Disposition:form-data;name=""{0}""" & ControlChars.CrLf & ControlChars.CrLf & "{1}" & ControlChars.CrLf & "", key, value)
Da das schnell ziemlich unübersichtlich wird geht alternativ:
sbHeader.AppendFormat("Content-Disposition:form-data;name=""{0}""{2}{2}{1}{2}", key, value, ControlChars.CrLf)
Und im Falle eines StringBuilders kann man auch darauf verzichten:
' Ungetestet With sbHeader .AppendFormat("Content-Disposition:form-data;name=""{0}"", key) .AppendLine() .AppendLine() .AppendFormat("{0}", value) .AppendLine() End With
was zwar länger aber deutlich leichter zu lesen ist.
Wobei AppendLine Envirionment.NewLine als Zeilentrenner einfügt.Gruß Elmar
- Als Antwort vorgeschlagen Thorsten DörflerModerator Sonntag, 22. Mai 2011 20:06
- Als Antwort markiert Thorsten DörflerModerator Mittwoch, 25. Mai 2011 06:41