Как ответить на некоторые параметры формы после обработки запроса от HttpListenerContext в. net (C#) - PullRequest
0 голосов
/ 16 апреля 2020

Я работаю с Httplistenr, запрос которого обрабатываю через HttpListenerContext.

Раньше я просто отправлял Ok http ответ без какого-либо содержимого, теперь мне нужно ответить с помощью нескольких параметров, таких как Field1 = A, Field2 = B.

Я установил response.ContentType на application/x-www-form-urlencoded, но я не знаю, как добавить значения ответа к ответу.

Мой текущий метод -

  private void ProcessRequest(HttpListenerContext context)
  {        
        if (context.Request.Headers != null && context.Request.Headers.Count > 0)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append($"Request Headers {Environment.NewLine}");
            ..
        }             

        if (context.Request.InputStream != null)
        {
            using (var body = context.Request.InputStream)
            {
                var encoding = context.Request.ContentEncoding;

                using (var reader = new StreamReader(body, encoding))
                {
                    var conentRecieved  = reader.ReadToEnd();
                    ..,
                }
            }
        }

        var response = context.Response;
        response.ContentType = "application/x-www-form-urlencoded";             
        response.StatusCode = (int)HttpStatusCode.OK;
        response.StatusDescription = "OK";
        response.ContentLength64 = 0;
        response.OutputStream.Close();
        response.Close();            
}

Я знаю, как отправлять json текст или простой текст, устанавливая соответствующий тип контента и устанавливая контент

1 Ответ

1 голос
/ 17 апреля 2020

Чтобы отправить строку в теле ответа с помощью HttpListener, вы либо кодируете строку в byte[] и используете response.OutputStream.Write() и заголовок content-length. Или просто запишите начальную запись в него с System.IO.StreamWriter, и он будет внутренне либо использовать буферизацию и заголовок content-length, либо использовать кодирование передачи по частям.

например:

var response = context.Response;
response.ContentType = "application/x-www-form-urlencoded";
response.StatusCode = (int)HttpStatusCode.OK;
var responseString = "MyVariableOne=ValueOne&MyVariableTwo=ValueTwo";
var responseBody = System.Text.Encoding.UTF8.GetBytes(responseString);
response.ContentLength64 = responseBody.Length;
response.OutputStream.Write(responseBody, 0, responseBody.Length);
response.Close();
...