繁体   English   中英

SignalR & Azure网站上的跨域

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM