Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 信号器访问令牌工厂不';t将令牌传递给请求查询字符串_C#_Asp.net Core_Jwt_Signalr - Fatal编程技术网

C# 信号器访问令牌工厂不';t将令牌传递给请求查询字符串

C# 信号器访问令牌工厂不';t将令牌传递给请求查询字符串,c#,asp.net-core,jwt,signalr,C#,Asp.net Core,Jwt,Signalr,我试图通过查询字符串访问SignalRHub类上的令牌。 以下是客户端代码: const connection = new signalR.HubConnectionBuilder() .withUrl($("#url").val(), { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets, accessTokenFactory: () => { tok

我试图通过查询字符串访问SignalRHub类上的令牌。 以下是客户端代码:

const connection = new signalR.HubConnectionBuilder()
    .withUrl($("#url").val(), {
    skipNegotiation: true,
    transport: signalR.HttpTransportType.WebSockets,
    accessTokenFactory: () => {
       token                                         
    }
  })
  .configureLogging(signalR.LogLevel.Trace)
  .build(); 
Jwt配置:

OnMessageReceived = context =>
{
var accessToken = context.Request.Query["access_token"];
var path = context.HttpContext.Request.Path.Value;

if (!string.IsNullOrEmpty(accessToken) && (path.Equals("/websocket"))
{
 context.Token = accessToken;
}
 return Task.CompletedTask;
}
问题是,当我向集线器发出请求时,accessToken为null,即使我通过accessTokenFactory传递它。没有查询字符串参数“access\u token”。代码如下所示。我已经尝试在启动时更改中间件调用,但没有解决

启动文件:

public void ConfigureServices(IServiceCollection services)
{            
   services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
   .AddSessionStateTempDataProvider();

   /*aditional configurations*/

   services.AddSignalR();

   /*more aditional configurations*/

}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   app.UseCors(options =>
   {
    options.WithExposedHeaders("Location");
    options.AllowAnyOrigin();
    options.AllowAnyHeader();
    options.AllowAnyMethod();
    options.AllowCredentials();
   });

   app.UseSignalR(routes =>
   {
    routes.MapHub<SignalRHub>("/websocket");
   });

   app.UseAuthentication();

   app.UseMvc(routes =>
   {
    routes.MapRoute("api", "{controller}/{action}/{id}");
   });

   /*aditional middlewares*/

   app.UseForwardedHeaders(new ForwardedHeadersOptions
   {
    ForwardedHeaders = ForwardedHeaders.XForwardedFor |          
    ForwardedHeaders.XForwardedProto
   });

}
public void配置服务(IServiceCollection服务)
{            
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.AddSessionStateTempDataProvider();
/*传统构型*/
services.AddSignalR();
/*更多传统配置*/
}
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
app.UseCors(选项=>
{
选项。带公开标题(“位置”);
options.AllowAnyOrigin();
options.AllowAnyHeader();
options.AllowAnyMethod();
options.AllowCredentials();
});
app.usesigner(路由=>
{
routes.MapHub(“/websocket”);
});
app.UseAuthentication();
app.UseMvc(路由=>
{
MapRoute(“api”,“{controller}/{action}/{id}”);
});
/*传统的中间产品*/
app.UseForwardedHeaders(新ForwardedHeaders选项
{
ForwardedHeaders=ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});
}

任何帮助都将受到重视

看起来您实际上并没有在accessTokenFactory实现中提供令牌。您需要返回令牌值,否则您的HUB连接将无法获取该值

accessTokenFactory: () => {
   return token                                         
}

它需要是
accessTokenFactory:()=>{return token}
或者只是
accessTokenFactory:()=>token
。。。我现在觉得自己非常愚蠢。。。非常感谢。我要把它留给我未来的自己好好笑一笑。。。经典的第一个问题