[英]Cross-domain will not work with a SignalR PersistentConnection
[英]SignalR & Cross-Domain on AzureWebsite
我正在尝试在 AzureWebsites 应用程序上使用 SignalR,但遇到了跨域问题。
从本教程开始,在本地运行或在 azurewebsites 上运行时一切正常: https://docs.microsoft.com/en-us/aspnet/core/tutorials/signalr?view=aspnetcore-3.1&tabs=visual-studio
教程代码没有变化,一切照旧。
如果我将客户端移动到与 SignalR 服务器应用程序不同的域,它将不再工作。
我正在研究这个问题,但任何指针将不胜感激。
您需要做的是首先像这样配置您的 SignalR 应用程序:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(cfg =>
{
cfg.AddDefaultPolicy(policy =>
{
policy.WithOrigins(Configuration.GetSection("AuthServer:DomainBaseUrl").Get<string[]>())
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.SetIsOriginAllowed((_) => true)
.SetIsOriginAllowedToAllowWildcardSubdomains();
});
});
services.AddSignalR(options =>
{
options.ClientTimeoutInterval = TimeSpan.FromHours(1);
options.EnableDetailedErrors = true;
options.HandshakeTimeout = TimeSpan.FromMinutes(10);
options.KeepAliveInterval = TimeSpan.FromMinutes(5);
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Code removed for brevity
app.UseCors();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
注意:下面的行
policy.WithOrigins(Configuration.GetSection("AuthServer:DomainBaseUrl").Get<string[]>())
用于从配置文件中获取域列表(域数组)以允许 CORS 并且是。
在您的客户端应用程序中也这样做,希望您的客户端应用程序也是 ASP.NET Core MVC 应用程序。
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(cfg =>
{
cfg.AddDefaultPolicy(policy => {
policy.AllowAnyHeader();
policy.AllowAnyMethod();
policy.AllowAnyOrigin();
policy.WithMethods();
});
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Code removed for brevity
app.UseCors();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
我希望这对您的情况有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.