为Web API控制器创建MVC控制器代理

jkr*_*r01 6 c# asp.net asp.net-mvc proxy asp.net-web-api

我有一个外部公开的MVC项目.我有一个内部Web API项目.

由于我无法控制的原因,我无法直接公开Web API项目,也无法将Web API控制器添加到我的MVC项目中.

我需要创建一个MVC控制器,它将充当Web API控制器的代理.我需要MVC Controller的响应看起来好像是直接调用了Web API.

完成此任务的最佳方法是什么?

有没有比我到目前为止更好的方法?

如何修复我得到的错误?

这是我到目前为止:

MyMVCController

[HttpGet]
public HttpResponseMessage GetData(HttpRequestMessage request)
    {
        ...

        var response = proxy.GetData();

        return request.CreateResponse();
    }
Run Code Online (Sandbox Code Playgroud)

MyProxyClass

public HttpResponseMessage GetData()
    {
        ...
        return HttpRequest(new HttpRequestMessage(HttpMethod.Get, uri));
    }

private HttpResponseMessage HttpRequest(HttpRequestMessage message)
    {
        HttpResponseMessage response;

        ...

        using (var client = new HttpClient())
        {
            client.Timeout = TimeSpan.FromSeconds(120);
            response = client.SendAsync(message).Result;
        }

        return response;
    }
Run Code Online (Sandbox Code Playgroud)

在MVC控制器中,我在request.CreateResponse()行上收到InvalidOperationException.错误说:

请求没有关联的配置对象,或者提供的配置为null.

任何帮助将不胜感激.我搜索过谷歌和StackOverflow,但我找不到在MVC和Web API之间创建这个代理的好解决方案.

谢谢!

ale*_*eha 6

您可以通过JsonResult在控制器中创建一些操作来实现,该操作将返回调用 Web API 的结果。

public class HomeController : Controller
{
    public async Task<JsonResult> CallToWebApi()
    {
        return this.Content(
            await new WebApiCaller().GetObjectsAsync(),
            "application/json"
        );
    }
}

public class WebApiCaller
{
    readonly string uri = "your url";

    public async Task<string> GetObjectsAsync()
    {
        using (HttpClient httpClient = new HttpClient())
        {
            return await httpClient.GetStringAsync(uri);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)