Если вы сталкиваетесь с этим при отладке в Visual Studio, убедитесь, что путь сборки проекта указывает на локальный диск или выполните эти шаги , чтобы предоставить разрешения для сетевой папки.
Я закончил реализацию прокси-промежуточного программного обеспечения, вдохновленного проектом в GitHub Asp.Net.
Он в основном реализует промежуточное программное обеспечение, которое считывает полученный запрос, создает из него копию и отправляет его обратно в настроенную службу, считывает ответ от службы и отправляет ее обратно вызывающему абоненту.
Вот базовая реализация библиотеки прокси-сервера для 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();
}
}
}
services.AddProxy(...)
. Я использую Microsoft.AspNetCore.Proxy v0.2.0. Кроме того, метод RunProxy
не принимает параметр Uri
в качестве параметра. Какая версия была использована для этого примера?
– Allan
20 January 2018 в 01:31