Как создать .NET Framework WebAPI Controller, который отвечает на все запросы - PullRequest
1 голос
/ 12 октября 2019

Нам нужно создать один контроллер Web API, который отвечает на все входящие запросы. Это сделано для того, чтобы мы могли создать своего рода обратный прокси-сервер, где входящий трафик обрабатывается, а затем отправляется на другой сервер.

Подход, который мы хотели бы использовать, - .NET Framework Web API принимает входящий запрос черезодин контроллер обрабатывает его, затем отправляет на исходный сервер, а затем, когда ответ возвращается, возвращает его клиенту.

Прокси-часть проста - но я не знаю, как это сделать,настройте правила маршрутизации в Web API для приема всего входящего трафика всеми методами (GET, POST и т. д.) в один контроллер.

Любая помощь с этим будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Вы можете добавить маршрут для перехвата всех запросов

config.Routes.MapHttpRoute(
    name: "default-catch-all",
    routeTemplate: "{*uri}",
    defaults: new { controller = "Home", action = "Handle" }
);

Если единственное, что вам нужно, это иметь прокси, то web api - не лучший вариант. Вы должны написать промежуточное программное обеспечение для этого. Вот простая версия промежуточного ПО для прокси

public class ProxyMiddleware : OwinMiddleware
{
    private static HttpClient _httpClient = new HttpClient();

    public ProxyMiddleware(OwinMiddleware next)
        : base(next)
    {
    }

    public override async Task Invoke(IOwinContext context)
    {
        HttpRequestMessage request = new HttpRequestMessage(new HttpMethod(context.Request.Method), new Uri("http://SERVERURL/" + context.Request.Path));
        request.Content = new StreamContent(context.Request.Body);
        HttpResponseMessage response = await _httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
        context.Response.StatusCode = (int)response.StatusCode;
        await response.Content.CopyToAsync(context.Response.Body);
    }
}
0 голосов
/ 12 октября 2019

Я думаю, что такой маршрут должен помочь, вам нужно определить контроллер, хотя в этом примере я назвал custom.

routes.MapRoute(
    name: "Custom",
    template:"{*AllValues}",
        defaults: new { controller = "Custom", action = "Custom" });
    });

Протестировано для работы на asp.net-core 2.2, но я думаю, что это будет работать на других платформах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...