我们需要创建一个Web API控制器来响应所有入站请求。这样,我们就可以创建一个反向代理,在其中处理传入流量,然后将其发送到另一台服务器。
我们要使用的方法是.NET Framework Web API通过单个控制器接受入站请求,对其进行处理,然后将其发送到原始服务器,然后在响应返回时将其返回给客户端。
代理部分很简单-但是我不知道该怎么做,是在Web API中配置路由规则,以将所有方法(GET,POST等)中的所有入站流量接受到单个控制器中。
任何帮助,将不胜感激。
答案 0 :(得分:1)
我认为像这样的自定义路由应该可以解决问题,您需要定义一个控制器,尽管在本示例中我将其称为“自定义”。
routes.MapRoute(
name: "Custom",
template:"{*AllValues}",
defaults: new { controller = "Custom", action = "Custom" });
});
经过测试可在asp.net-core 2.2上运行,但我认为它将在其他框架上运行。
答案 1 :(得分:0)
您可以添加一条路线以捕获所有请求
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);
}
}