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之间创建这个代理的好解决方案.
谢谢!
您可以通过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)
| 归档时间: |
|
| 查看次数: |
9404 次 |
| 最近记录: |