Reputation: 632
I have a simple method which returns a IHttpActionResult
:
public IHttpActionResult invokeGetAction(HttpRequestMessage _request, String
_forResource)
{
return new GetResourceActionResult(_request, _forResource);
}
The implementation of GetResourceActionResult
looks as follows:
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);
}
}
I want to call the invokeGetAction()
inside a System.Web.Http.ApiControllers' Get() method to just foward the present request to another API like
[Authorize]
[Route("")]
public IHttpActionResult Get()
{
return _someService.invokeGetAction(Request, "http://mockingsvc.../api/songs");
}
And I can see the HttpStatusCode.OK so I assume I'm not failing right now. But I have no idea where and how to get the content data delivered by the invokeGetAction()
- somewhere in ExecuteAsync()
?
Upvotes: 4
Views: 3635
Reputation: 632
Ok yes, I forgot something... ;-) My code is now
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;
}
}
and it works like a charm.
Upvotes: 1