Как преобразовать System.Net.Http.HttpResponseMessage в System.Web.Mvc.ActionResult - PullRequest
0 голосов
/ 18 октября 2018

Я пишу простое прокси-приложение, которое получает «URL-адрес» типа «/ xController / xMethod» и получает результат из другого веб-приложения с помощью HttpClient и показывает результат.

Мой метод:

public ActionResult Index(string urlAddress)
{
   var data = "";
   if (Request.ContentLength > 0 && httpRequestMessage != null)
       data = httpRequestMessage.Content.ReadAsStringAsync().Result;

    using (var client = new HttpClient())
    {
      // fill header and set target site url 

      // Make Post Data
      var buffer = System.Text.Encoding.UTF8.GetBytes(data);
      var byteContent = new ByteArrayContent(buffer);
      if (!String.IsNullOrWhiteSpace(Request.ContentType) && !String.IsNullOrEmpty(Request.ContentType))
           byteContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue(Request.ContentType);

       // make query string ....

       // sending request to target site         
       HttpResponseMessage response = null;
       if (Request.HttpMethod.ToUpper() == "POST")
             response = client.PostAsync(urlAddress + queryString, byteContent).Result;
       else
             response = client.GetAsync(any + queryString).Result;

    // My Problem is in here....
    return ....;              
  }
}

Я хочу показать свой запрос в браузере, и когда ответ был файл, браузер загружает содержимое, а когда ответ Json, отображается как Json и так далее.

(например) я знаю, когда я хочу показать HTML.я использую:

ActionResult x = new ContentResult()
                {
                    Content = response.Content.ReadAsStringAsync().Result,
                    ContentType = response.Content.Headers.ContentType.MediaType
                };
                return x;

или когда я хочу вернуться в виде HTML, используя JsonActionResult, или в файле, используя FileContentResult, но я хочу быстрое и надежное решение для преобразования любого HttpResponseMessage в лучший класс ActionResult

1 Ответ

0 голосов
/ 18 октября 2018

Я предлагаю вам использовать IHttpActionResult в качестве результата действия, представленного в Web API 2. Вы можете преобразовать HttpResponseMessage в IHttpActionResult, используя метод ResponseMessage из ApiController.Итак, ваш контроллер должен наследовать ApiController.

Мое решение:

 public class TrainController : ApiController
{
    public IHttpActionResult SomeAction()
    {
        HttpResponseMessage responseMsg =
            new 
            HttpResponseMessage(HttpStatusCode.RedirectMethod);

        /*responseMsg = your implementation*/

        IHttpActionResult response = this.ResponseMessage(responseMsg);
        return response;
    }
}
...