如何创建响应所有请求的 .NET 框架 WebAPI 控制器



我们需要创建一个响应所有入站请求的 Web API 控制器。 这样我们就可以创建一个反向代理,在其中处理传入的流量,然后发送到另一台服务器。

我们想要使用的方法是.NET Framework Web API通过单个控制器接受入站请求,对其进行处理,然后将其发送到源服务器,然后在响应返回时将其返回到客户端。

代理部分很简单 - 但我不知道该怎么做的是在 Web API 中配置路由规则,以接受所有方法(GET、POST 等(的所有入站流量到单个控制器中。

任何这方面的帮助将不胜感激。

我认为像这样的自定义路由应该可以解决问题,您需要定义一个控制器,尽管我在此示例中将其称为自定义。

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

经过测试可以在 asp.net 核 2.2 上运行,但我认为它可以在其他框架上运行。

您可以添加路由以捕获所有请求

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);
}
}

最新更新