Signalr 用于WebSocket连接的ProxyKit和Querystring

Signalr 用于WebSocket连接的ProxyKit和Querystring,signalr,reverse-proxy,asp.net-core-2.1,kestrel-http-server,asp.net-core-signalr,Signalr,Reverse Proxy,Asp.net Core 2.1,Kestrel Http Server,Asp.net Core Signalr,我正在使用ProxyKit作为反向代理。我需要代理http和websocket(signalR)流量,因此我有以下配置。我还需要跨querystring发送,我需要向基本配置添加什么以同时包含querystring,我尝试了以下方法: var redirectTo = "https://proxied-server:5002"; var wssredirectTo = "ws://proxied-server:5002"; app.UseWebSockets();

我正在使用ProxyKit作为反向代理。我需要代理http和websocket(signalR)流量,因此我有以下配置。我还需要跨querystring发送,我需要向基本配置添加什么以同时包含querystring,我尝试了以下方法:

    var redirectTo = "https://proxied-server:5002";
    var wssredirectTo = "ws://proxied-server:5002";

    app.UseWebSockets();

    app.UseWebSocketProxy(context => new Uri(wssredirectTo + context.Request.Path.ToString() + context.Request.QueryString.ToString()),
        options => options.AddXForwardedHeaders());

    app.RunProxy(context =>
    {
        var finalUrl = redirectTo + context.Request.Path.ToString();
        var finalContext = context.ForwardTo(finalUrl);
        finalContext.UpstreamRequest.RequestUri = new Uri(finalUrl);

        return finalContext
            .CopyXForwardedHeaders()
            .AddXForwardedHeaders()
            .Send();
    });
但我仍然只能在代理服务器kestrel日志中看到根url:

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 POST https://proxied-server:5002/signal/satellite/negotiate text/plain; charset=UTF-8 0
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 2.3528ms 200 application/json
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://proxied-server:5002/signal/satellite
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 2.3958ms 400 text/plain

您不需要直接将
RequestUri
设置为1,2:

app.RunProxy(上下文=>context
.ForwardTo(重定向到)
.CopyXForwardedHeaders()
.AddXForwardedHeaders()
.Send());
解释 ProxyKit已处理
转发到
中的
上下文.Request.QueryString

var uri=new uri(UriHelper.BuildAbsolute(
上游方案,
上游主机,
upstreamHost.PathBase,
context.Request.Path,
context.Request.QueryString);
工具书类

  • 您不需要直接将
    RequestUri
    设置为1,2:

    app.RunProxy(上下文=>context
    .ForwardTo(重定向到)
    .CopyXForwardedHeaders()
    .AddXForwardedHeaders()
    .Send());
    
    解释 ProxyKit已处理
    转发到
    中的
    上下文.Request.QueryString

    var uri=new uri(UriHelper.BuildAbsolute(
    上游方案,
    上游主机,
    upstreamHost.PathBase,
    context.Request.Path,
    context.Request.QueryString);
    
    工具书类

  • 感谢您的回复-我对标准http调用没有任何问题,我的完整uri正在传输。问题在于ws:calls。我需要添加一些东西吗?app.UseWebSocketProxy(context=>newURI(wssredirectTo+context.Request.Path.ToString()+context.Request.QueryString.ToString()),options=>options.AddXForwardedHeaders());感谢您的回复-我对标准http调用没有任何问题,我的完整uri正在传输。问题在于ws:calls。我需要添加一些东西吗?app.UseWebSocketProxy(context=>newURI(wssredirectTo+context.Request.Path.ToString()+context.Request.QueryString.ToString()),options=>options.AddXForwardedHeaders());