【问题标题】:How to Create .NET Framework WebAPI Controller that responds to All Requests如何创建响应所有请求的 .NET Framework WebAPI 控制器
【发布时间】:2019-10-12 18:25:57
【问题描述】:

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

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

代理部分很简单——但我不知道如何在 Web API 中配置路由规则以接受所有入站流量,跨所有方法(GET、POST 等)到单个控制器中。

对此的任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 太棒了!快速提问 - 在这种情况下,出于好奇,AllValues 指的是什么?
    • 我希望我有一个更聪明的答案,但我想我在一个例子中搜索了几个小时后找到了它,而且我没有完全理解上下文。我的假设是它是一个保留值,但我找不到任何关于它的文档。
    【解决方案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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-17
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多