如何通过IHttpActionResult获取内容

本文关键字:获取 IHttpActionResult 何通过 | 更新日期: 2023-09-27 18:32:59

我有一个简单的方法返回一个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()的某个地方?

如何通过IHttpActionResult获取内容

好的,是的,我忘记了一些东西... ;-)我的代码现在是

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;
        }
    }

它就像一个魅力。