簡體   English   中英

SignalR JavaScript 客戶端連接到遠程 .Net Core Hub 時出錯

[英]SignalR JavaScript client error in connect to remote .Net Core Hub

我正在使用 Microsoft 教程中所述的 Asp.Net Core (3) SignalR (Latest Version) https://docs.microsoft.com/en-us/aspnet/core/signalr/javascript-client?view=aspnetcore -3.1但連接到集線器時出錯。

安裝在服務器上的 NuGet 包:

Microsoft.AspNetCore.SignalR(1.1.0)
Microsoft.AspNetCore.SignalR.Core(1.1.0)

我的服務器在運行的http://本地主機:52852和客戶端在運行的http://本地主機:10843

我在服務器 CORS 策略中添加了客戶端 URL 作為可接受的來源。

服務器啟動:

// ConfigureServices
    services.AddCors(options => 
        options.AddPolicy("CorsPolicy",
                builder =>
                {
                    builder
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .WithOrigins("http://localhost:10843/")
                    .AllowCredentials();
                }));

    services.AddSignalR(hubOptions => {
        hubOptions.EnableDetailedErrors = true;
    });

// App Configure

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        endpoints.MapHub<AsteriskHub>("/signalr");
    });

// Hub
    public class MyHub : Hub
    {
        // Some Codes ...
    }

客戶端Javascript:

const connection = new signalR.HubConnectionBuilder()
    .withUrl("http://localhost:52852/signalr")
    .configureLogging(signalR.LogLevel.Information)
    .withAutomaticReconnect()
    .build();

connection.start();

我在 Microsoft 和 Asp.Net 和 Stackoverflow 帖子上閱讀了許多與我的問題類似的文檔,但對為什么出現此錯誤感到困惑:

CORS 策略已阻止在 ' http://localhost:52852/signalr/negotiate?negotiateVersion=1 ' 處訪問 XMLHttpRequest,來自源 ' http://localhost:10843 ' 已被 CORS 策略阻止:對預檢請求的響應未通過訪問控制檢查:請求的資源上不存在“Access-Control-Allow-Origin”標頭。

謝謝你的幫助。

.WithOrigins("http://localhost:10843/")

請刪除 URL 末尾的斜杠/ ,如下所示。

.WithOrigins("http://localhost:10843")

此外,請使用app.UseCors("CorsPolicy")應用您的 CORS 政策,如下所示。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //... other middleware ...

    app.UseCors("CorsPolicy");

    app.UseRouting();

    //...

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        endpoints.MapHub<AsteriskHub>("/signalr");
    });

    //...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM