gpt4 book ai didi

c# - 为 Web API Controller 创建 MVC Controller 代理

转载 作者:太空狗 更新时间:2023-10-29 21:44:23 25 4
gpt4 key购买 nike

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

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

我需要创建一个 MVC Controller 来充当 Web API Controller 的代理。我需要来自 MVC Controller 的响应看起来像是直接调用了 Web API。

实现此目标的最佳方法是什么?

有没有比我目前使用的方法更好的方法?

如何解决我遇到的错误?

这是我目前所拥有的:

MyMVCController

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

var response = proxy.GetData();

return request.CreateResponse();
}

我的代理类

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

在 MVC Controller 中,我在 request.CreateResponse() 行上收到 InvalidOperationException。错误说:

The request does not have an associated configuration object or the provided configuration was null.

如有任何帮助,我们将不胜感激。我在 Google 和 StackOverflow 上进行了搜索,但未能找到在 MVC 和 Web API 之间创建此代理的良好解决方案。

谢谢!

最佳答案

您可以通过在 Controller 中创建一些 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);
}
}
}

关于c# - 为 Web API Controller 创建 MVC Controller 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27690187/

25 4 0
文章推荐: c# - 模拟 ctrl key down 事件和 ctrl key up 事件后 Ctrl key keep down
文章推荐: python - 如何创建一个能够包装实例、类和静态方法的 Python 类装饰器?
文章推荐: Python多处理器编程
文章推荐: c# - 从 PropertyInfo 获取访问器作为 Func 和 Action 委托(delegate)