我有一个返回 IHttpActionResult
的简单方法:
public IHttpActionResult invokeGetAction(HttpRequestMessage _request, String
_forResource)
{
return new GetResourceActionResult(_request, _forResource);
}
GetResourceActionResult
的实现如下所示:
public class GetResourceActionResult : IHttpActionResult
{
private readonly HttpRequestMessage _request;
private readonly string _location;
public GetResourceActionResult(HttpRequestMessage request, string location)
{
_request = request;
_location = location;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = _request.CreateResponse(HttpStatusCode.OK);
response.Headers.Location = new Uri(_location);
return Task.FromResult(response);
}
}
我想在 System.Web.Http.ApiControllers 的 Get() 方法中调用 invokeGetAction()
以将当前请求转发给另一个 API,例如
[Authorize]
[Route("")]
public IHttpActionResult Get()
{
return _someService.invokeGetAction(Request, "http://mockingsvc.../api/songs");
}
而且我可以看到 HttpStatusCode.OK,所以我假设我现在没有失败。但我不知道在哪里以及如何获取 invokeGetAction()
传递的内容数据 - 在 ExecuteAsync()
中的某个地方?
最佳答案
好的,是的,我忘了一些东西...... ;-) 我的代码现在是
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
return Task.FromResult(Execute(_resourceUri));
}
public HttpResponseMessage Execute(String resourceUri)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(resourceUri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return client.GetAsync("api/songs").Result;
}
}
它就像一个魅力。
关于c# - 如何通过IHttpActionResult获取内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35180388/