marrrschine
marrrschine

Reputation: 632

How to get content through IHttpActionResult

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

Answers (1)

marrrschine
marrrschine

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

Related Questions