Возврат содержимого HttpResponseMessage из прохода через API в ядре ASP.NET Core [duplicate]

Если вы сталкиваетесь с этим при отладке в Visual Studio, убедитесь, что путь сборки проекта указывает на локальный диск или выполните эти шаги , чтобы предоставить разрешения для сетевой папки.

17
задан Gimly 2 February 2017 в 11:56
поделиться

2 ответа

Я закончил реализацию прокси-промежуточного программного обеспечения, вдохновленного проектом в GitHub Asp.Net.

Он в основном реализует промежуточное программное обеспечение, которое считывает полученный запрос, создает из него копию и отправляет его обратно в настроенную службу, считывает ответ от службы и отправляет ее обратно вызывающему абоненту.

11
ответ дан Gimly 19 August 2018 в 05:13
поделиться
  • 1
    можете ли вы поделиться своими инструментами вашего промежуточного ПО? Если это возможно. Это сильно основано на .Net Core? Благодарю. – Dmitriy 28 November 2017 в 02:14
  • 2
    @Dmitriy Нет, извините, я не могу поделиться реализацией, поскольку она является частью программы с закрытым исходным кодом. Но это в основном тот же код, что и в вопросе, реализованном как промежуточное ПО. Проверьте файл github.com/aspnet/Proxy/blob/dev/src/Microsoft.AspNetCore.Proxy/… , чтобы получить представление о том, как запустить промежуточное программное обеспечение. – Gimly 28 November 2017 в 15:14
  • 3
    Спасибо! Я изучу этот пример. Теперь я нахожусь так же, как в вашем примере выше, - создайте простой прокси-контроллер с методами CRUD и по умолчанию запросите на нем любые запросы. В этом контроллере я просто разбираю имя хоста и контроллера в url, меняю хост и порт через словарь из appsettings.json. Но я только начинаю ... – Dmitriy 28 November 2017 в 15:19
  • 4
    Пожалуйста, скажите мне, если у вас будет другой вопрос, я постараюсь помочь. – Gimly 28 November 2017 в 17:06
  • 5
    простите, не могли бы вы мне немного помочь? Я пытаюсь создать правильные маршруты: один для аутентификации (например, host / Authentification / Authentify), а во-вторых, который улавливает все URL-адреса, которые не являются шаблоном выше. Итак, я попытался написать UseMVC, [Route (& quot; {* url} & quot;]) в моем прокси и [Маршрут («Аутентификация»)] для контроллера auth, но он не работает должным образом. Не могли бы вы дать мне хороший пример маршрутизации? Является ли это возможным? Спасибо! – Dmitriy 30 November 2017 в 16:24

Вот базовая реализация библиотеки прокси-сервера для ASP.NET Core :

Это не реализует авторизацию, но может быть полезно для тех, кто ищет простой обратный прокси-сервер с Ядро ASP.NET. Мы используем это только для этапов разработки.

using System;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Primitives;

namespace Sample.Proxy
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddLogging(options =>
            {
                options.AddDebug();
                options.AddConsole(console =>
                {
                    console.IncludeScopes = true;
                });
            });

            services.AddProxy(options =>
            {
                options.MessageHandler = new HttpClientHandler
                {
                    AllowAutoRedirect = false,
                    UseCookies = true 
                };

                options.PrepareRequest = (originalRequest, message) =>
                {
                    var host = GetHeaderValue(originalRequest, "X-Forwarded-Host") ?? originalRequest.Host.Host;
                    var port = GetHeaderValue(originalRequest, "X-Forwarded-Port") ?? originalRequest.Host.Port.Value.ToString(CultureInfo.InvariantCulture);
                    var prefix = GetHeaderValue(originalRequest, "X-Forwarded-Prefix") ?? originalRequest.PathBase;

                    message.Headers.Add("X-Forwarded-Host", host);
                    if (!string.IsNullOrWhiteSpace(port)) message.Headers.Add("X-Forwarded-Port", port);
                    if (!string.IsNullOrWhiteSpace(prefix)) message.Headers.Add("X-Forwarded-Prefix", prefix);

                    return Task.FromResult(0);
                };
            });
        }

        private static string GetHeaderValue(HttpRequest request, string headerName)
        {
            return request.Headers.TryGetValue(headerName, out StringValues list) ? list.FirstOrDefault() : null;
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseWebSockets()
                .Map("/api", api => api.RunProxy(new Uri("http://localhost:8833")))
                .Map("/image", api => api.RunProxy(new Uri("http://localhost:8844")))
                .Map("/admin", api => api.RunProxy(new Uri("http://localhost:8822")))
                .RunProxy(new Uri("http://localhost:8811"));
        }

        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}
1
ответ дан Kerem Demirer 19 August 2018 в 05:13
поделиться
  • 1
    Можете ли вы обновить пакет nuget, этот код не работает с опубликованным 0.2.0 – Kugel 18 January 2018 в 02:54
  • 2
    Не уверен, что я что-то упустил с помощью этого кода или нет, но я не могу разрешить services.AddProxy(...). Я использую Microsoft.AspNetCore.Proxy v0.2.0. Кроме того, метод RunProxy не принимает параметр Uri в качестве параметра. Какая версия была использована для этого примера? – Allan 20 January 2018 в 01:31
  • 3
    Я использовал v0.2 nuget из каналов предварительного просмотра: dotnet.myget.org/feed/aspnetcore-release/package/nuget/… – Kerem Demirer 26 January 2018 в 08:40
  • 4
    У меня такая же проблема с @Allan. Есть ли для этого решение? – Bangyou 7 March 2018 в 03:49
  • 5
    Кажется, SDK не поддерживает asp net core 2.1 при компиляции исходных кодов. – Bangyou 7 March 2018 в 04:29
Другие вопросы по тегам:

Похожие вопросы: