Search code examples
c#httpwebrequestencoder

Reading charcaters like < and > back as ascii in web response


I have created my own web server for the Raspberry Pi (Windows IoT).

I have winform desktop app that makes a request to my web server:

StringBuilder sb = new StringBuilder();
sb.Append("<informedworker>");
sb.Append("<request name='Customer' action='GET' verb='*'>");                
sb.Append("</request>");
sb.Append("</informedworker>");

Uri url = new Uri("http://192.168.0.6/DATA_START" + sb.ToString() + "DATA_END");//, query, key));

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
    HttpStatusCode statusCode = ((HttpWebResponse)response).StatusCode;
    string contents = reader.ReadToEnd();
}

In my web server (UWP) I have:

StringBuilder request = new StringBuilder();
using (IInputStream input = args.Socket.InputStream)
{
 byte[] data = new byte[BufferSize];
 IBuffer buffer = data.AsBuffer();
 uint dataRead = BufferSize;
 while (dataRead == BufferSize)
 {
     await input.ReadAsync(buffer, BufferSize, InputStreamOptions.Partial);
     request.Append(ASCIIEncoding.ASCII.GetString(data, 0, data.Length));
     dataRead = buffer.Length;
 }
 System.Diagnostics.Debug.WriteLine(request.ToString());

and the response I read back here is:

GET /DATA_START%3Cinformedworker%3E%3Crequest%20name='Customer'%20action='GET'%20verb='*'%3E%3C/request%3E%3C/informedworker%3EDATA_END HTTP/1.1
Host: 192.168.0.6
Connection: Keep-Alive

as you can see the %3E%3C has replaced the '<'.

I can of course create my own parser to 'translate' these 'special' characters back.

Is there a built in encoder for this scenario though?

thanks


Solution

  • Have a look at UrlDecode in System.Net.WebUtility