2015-03-30 2 views
3

У меня есть приложение для брандмауэра 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 
} 
+0

Если PostMan не показывает, HttpWebResponse не будет либо. Убедитесь, что вы не задаете 'outputMessage' значение null или пустое. – CodeCaster

+0

Я могу заверить, что outputMessage не является нулевым или пустым, когда он достигает: resp.Content = new StringContent (outputMessage, Encoding.UTF8, "text/plain"); – koala

+0

Несомненно, но ваш вывод PostMan показывает 'Content: System.Net.Http.StringContent', который является _type name_ объекта, который вы пытаетесь вернуть. Опять же, убедитесь, что вы не перезаписываете 'outputMessage'. Код, который вы показываете, должен делать то, что вы ожидаете, есть что-то еще, что вы не показываете. – CodeCaster

ответ

4

Вы путаете WebAPI и MVC.

Для WebAPI будет работать HttpResponseMessageContent = new StringContent("the string")).

Для MVC, то syntax to return a string is (обратите внимание на тип ActionResult возврата и Content() вызов):

public ActionResult Test() 
{ 
    return Content("This is my output"); 
} 
+0

Я тестировал с помощью контроллера API, и он действительно работает! Не знал, что это была разница между MVC en API-контроллером – koala

+0

@koala в ASP.NET 5/MVC 6/vNext они пытаются объединить опыт. :) Различия вроде этого должны быть устранены в будущем. – CodeCaster

Смежные вопросы