У меня есть приложение для брандмауэра ASP.NET asp.net, которое имеет 1 контроллер и 1 функцию POST, которая принимает параметр. И функция возвращает HttpResponseMessage.Как получить содержание HttpWebResponseMessage
public class VersionController : Controller
{
[HttpPost]
public HttpResponseMessage LatestClientVersion(string myVar)
{
string outputMessage = "This is my output";
...
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(outputMessage, Encoding.UTF8, "text/plain");
return resp;
}
}
Для целей тестирования я использовал Postman для выполнения запроса POST по URL-адресу. Он отвечает:
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StringContent, Headers:
{
Content-Type: text/plain; charset=utf-8
}
Мой StatusCode reponds хорошо, но я не вижу свою строку «Это мой выход»
Так что я подумал, что, может быть, это что-то делать с C# конкретные вещи, поэтому я сделал приложение winforms C# для тестирования. Поэтому, когда я нажимаю на кнопку он делает следующее:
public void TestWebRequest()
{
try
{
WebRequest request = WebRequest.Create(txtURL.Text);
request.Method = "POST";
string postData = "myVar=test";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
// Send text to the textbox
SetOutputText(responseFromServer);
reader.Close();
dataStream.Close();
response.Close();
}
catch (Exception ex)
{
SetOutputText(ex.Message);
}
}
}
Эта функция работает отлично, но я все еще получаю ту же réponse, как в Почтальон ... Как я могу получить реальное содержание «Это мой выход «?
Редактировать
Я сделал еще один простой запрос HttpGet
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web;
using System.Web.Mvc;
using System.Web.Configuration;
using System.Net.Http.Headers;
using System.Net;
using System.Text;
namespace MyWebService.Controllers
{
public class VersionController : Controller
{
[HttpGet]
public HttpResponseMessage Test()
{
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new StringContent("This is my output");
return response;
}
}
}
При использовании Почтальон я получаю следующий результат
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StringContent, Headers:
{
Content-Type: text/plain; charset=utf-8
}
Если PostMan не показывает, HttpWebResponse не будет либо. Убедитесь, что вы не задаете 'outputMessage' значение null или пустое. – CodeCaster
Я могу заверить, что outputMessage не является нулевым или пустым, когда он достигает: resp.Content = new StringContent (outputMessage, Encoding.UTF8, "text/plain"); – koala
Несомненно, но ваш вывод PostMan показывает 'Content: System.Net.Http.StringContent', который является _type name_ объекта, который вы пытаетесь вернуть. Опять же, убедитесь, что вы не перезаписываете 'outputMessage'. Код, который вы показываете, должен делать то, что вы ожидаете, есть что-то еще, что вы не показываете. – CodeCaster