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

时间:2019-10-12 18:25:57

标签: c# asp.net .net asp.net-web-api

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

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

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

任何帮助,将不胜感激。

2 个答案:

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