gpt4 book ai didi

C# Web 应用程序 -> 代理所有请求 -> 从另一个 Web 应用程序返回内容(反向代理)

转载 作者:行者123 更新时间:2023-11-30 17:31:06 25 4
gpt4 key购买 nike

我想代理对网络应用程序的每个请求,将其传递给另一个网络应用程序,然后将我的其他网络应用程序响应返回给原始发件人。

它应该能够处理所有 http 方法content-types 等。我还应该能够编辑传入的请求并添加额外的 header 和内容。

这样做的背景是一个项目的安全架构,该项目在公共(public) DMZ 中有一个 Web 服务器,然后在允许与数据库服务器通信的内部网络中有另一个 Web 服务器。

enter image description here

为 ASP.NET 核心找到了一个线程,但最好它应该使用 .Net Framework 完成,而不是依赖于外部库。

Creating a proxy to another web api with Asp.net core

最佳答案

找到了一个很好的 Web API 答案,引导我朝着正确的方向前进。

https://stackoverflow.com/a/41680404/3850405

我首先添加了一个新的 ASP.NET Web 应用程序 -> MVC -> 无身份验证。

然后我删除了所有 accept Global.asaxpackages.configWeb.config

然后我编辑了 Global.asax 以使用 DelegatingHandler,如下所示:

public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(CustomHttpProxy.Register);
}
}

public static class CustomHttpProxy
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "Proxy",
routeTemplate: "{*path}",
handler: HttpClientFactory.CreatePipeline(
innerHandler: new HttpClientHandler(),
handlers: new DelegatingHandler[]
{
new ProxyHandler()
}
),
defaults: new { path = RouteParameter.Optional },
constraints: null
);
}
}

public class ProxyHandler : DelegatingHandler
{
private static HttpClient client = new HttpClient();

protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
var forwardUri = new UriBuilder(request.RequestUri.AbsoluteUri);
forwardUri.Host = "localhost";
forwardUri.Port = 62904;
request.RequestUri = forwardUri.Uri;

if (request.Method == HttpMethod.Get)
{
request.Content = null;
}

request.Headers.Add("X-Forwarded-Host", request.Headers.Host);
request.Headers.Host = "localhost:62904";
var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
return response;
}
}

在此之后,我必须添加静态内容,然后一切正常。

enter image description here

关于C# Web 应用程序 -> 代理所有请求 -> 从另一个 Web 应用程序返回内容(反向代理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48424510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com