Добавление контроллера в c# RestAPI для пересылки запроса и ответа в двух направлениях внутри http-действий - PullRequest
0 голосов
/ 29 марта 2020

У меня есть два уже существующих 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.

...