none
Zeilenumbruch im Request-Stream RRS feed

  • 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

    Donnerstag, 19. Mai 2011 12:40

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

    Donnerstag, 19. Mai 2011 18:55
    Beantworter

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

    Donnerstag, 19. Mai 2011 18:55
    Beantworter
  • Hallo thematt2,

    ich nehme an, dass Du mit Elmars Antwort das Problem lösen konntest. Wenn Du noch Fragen dazu hast, gib bitte Bescheid.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Mittwoch, 25. Mai 2011 06:42
    Moderator