У меня есть два уже существующих C# RestAPIs A и B . Клиенты взаимодействуют с A и B через HTTP-запросы и наоборот. По некоторым сетевым причинам B не будет доступен для Клиентов.
Задача состоит в том, чтобы добавить к A контроллер, который все еще может связываться с клиентами и B, для пересылки каждого запроса и ответа от клиентов на B и наоборот (клиент ⇆ A ⇆ B) . A должен иметь возможность перенаправлять каждый метод HTTP (GET, POST, ...) и файл или тело так же, как он получил. Также заголовки, тело, аутентификация et c. должен быть таким же. Это означает, что исходящий запрос из A должен быть идентичен входящему запросу. После пересылки запроса А также должен иметь возможность пересылать ответ (с тем же кодом ответа и т. Д. c.) Либо B, либо одного из Клиентов в противоположном направлении.
Это то, что я до сих пор:
[RoutePrefix("")]
public class TestAController : ApiController
{
[HttpGet]
[Route("{name:nonapi}/{backEnd}/{*urlSuffix}")]
public Task<HttpResponseMessage> PingGet(string name, string backEnd, string urlSuffix)
{
string ip = "";
string port ="";
//Do some stuff here to get IP and port of receiver out of the routing
Request.Headers.Remove("Host");
Request.RequestUri = new Uri("http://" + ip + port + "/api/test/ping");
Request.Content = null;
var client = new HttpClient();
return client.SendAsync(Request, HttpCompletionOption.ResponseHeadersRead);
}
[HttpPost]
[Route("{name:nonapi}/{backEnd}/{*urlSuffix}")]
public Task<HttpResponseMessage> PingPost(string name, string backEnd, string urlSuffix, [FromBody] string body)
{
string ip = "";
string port ="";
//Do some stuff here to get IP and port of receiver out of the routing
Request.Headers.Remove("Host");
Request.RequestUri = new Uri("http://" + ip + port + "/api/test/ping");
var client = new HttpClient();
return client.SendAsync(Request, HttpCompletionOption.ResponseHeadersRead);
}
}
Тестирование с бессонницей, HTTP GET, кажется, работает, но когда я пытаюсь отправить HTTP POST с простым текстом в качестве тела, это не работает. Бессонница говорит мне, что я получаю исключение HTTPRequestException. Пожалуйста, помогите мне решить эту проблему и добавить функции для остальных методов HTTP, если они должны отличаться. Я довольно новичок в ASP. NET.