如何将 System.Net.Http.HttpResponseMessage 转换为 System.Web.Mvc.ActionResult
How Can convert System.Net.Http.HttpResponseMessage to System.Web.Mvc.ActionResult
我正在编写简单的代理应用程序,它获取 "URL Address" 类似“/xController/xMethod”,并通过 HttpClient 从另一个 Web 应用程序获取结果并显示结果。
我的方法:
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;
或者当我想要 return 作为 html 使用 JsonActionResult 或在文件中使用 FileContentResult 时,但我想要快速可靠的解决方案来将任何 HttpResponseMessage 转换为 Best ActionResult Class
我建议您使用 IHttpActionResult 作为 Web API 2 中介绍的操作结果。
您可以使用 ResponseMessage 方法将 HttpResponseMessage 转换为 IHttpActionResult
来自 API 控制器。所以,你的控制器应该继承 ApiController。
我的解决方案:
public class TrainController : ApiController
{
public IHttpActionResult SomeAction()
{
HttpResponseMessage responseMsg =
new
HttpResponseMessage(HttpStatusCode.RedirectMethod);
/*responseMsg = your implementation*/
IHttpActionResult response = this.ResponseMessage(responseMsg);
return response;
}
}
我正在编写简单的代理应用程序,它获取 "URL Address" 类似“/xController/xMethod”,并通过 HttpClient 从另一个 Web 应用程序获取结果并显示结果。
我的方法:
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;
或者当我想要 return 作为 html 使用 JsonActionResult 或在文件中使用 FileContentResult 时,但我想要快速可靠的解决方案来将任何 HttpResponseMessage 转换为 Best ActionResult Class
我建议您使用 IHttpActionResult 作为 Web API 2 中介绍的操作结果。 您可以使用 ResponseMessage 方法将 HttpResponseMessage 转换为 IHttpActionResult 来自 API 控制器。所以,你的控制器应该继承 ApiController。
我的解决方案:
public class TrainController : ApiController
{
public IHttpActionResult SomeAction()
{
HttpResponseMessage responseMsg =
new
HttpResponseMessage(HttpStatusCode.RedirectMethod);
/*responseMsg = your implementation*/
IHttpActionResult response = this.ResponseMessage(responseMsg);
return response;
}
}