Как я могу Access-Control-Allow-Origin на signalR C # angular5 - PullRequest
0 голосов
/ 14 мая 2018

Я использую Angular 5 и C # API, и я пытаюсь реализовать SignalR для push-уведомлений; и я застрял на этой ошибке "Access-Control-Allow-Origin"

Я использую ng-signalr на angular5

enter image description here

Я сделал что-то не так, и я не знаю, где

startup.cs

using Owin;
using System.Web.Http;
using System.Web.Http.Cors;
using Microsoft.AspNet.SignalR;

namespace App5
{
    public class Startup
    {
        // This code configures Web API. The Startup class is specified as a type
        // parameter in the WebApp.Start method.
        public void Configuration(IAppBuilder appBuilder)
        {

            // Configure Web API for self-host. 
            HttpConfiguration config = new HttpConfiguration();


            var cors = new EnableCorsAttribute("*", "*", "*");
            config.EnableCors(cors);
            //  Enable attribute based routing
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}/{action}/{code}",
                defaults: new { id = RouteParameter.Optional , action = RouteParameter.Optional, code = RouteParameter.Optional}
            );

            appBuilder.UseWebApi(config);
            appBuilder.MapSignalR();
        }
    }
}

Ng2SignalRHub.cs

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace App5
{
    [Authorize]
    [HubName("Ng2SignalRHub")]
    public class Ng2SignalRHub : Hub
    {
        public override Task OnConnected()
        {

            Trace.TraceInformation("Ng2SignalRHub - OnConnected");

            var user = GetAuthenticatedUser();

            Clients.All.OnUserConnected(user);

            return base.OnConnected();
        }

        private string GetAuthenticatedUser()
        {
            var username = Context.QueryString["user"];
            if (string.IsNullOrWhiteSpace(username))
                throw new System.Exception("Failed to authenticate user.");

            Trace.TraceInformation("GetAuthenticatedUser :" + username);

            return username;
        }
    }

}

Пожалуйста, может у кого-нибудь есть решение этой проблемы заранее спасибо

1 Ответ

0 голосов
/ 14 мая 2018

Посмотрите на эту ссылку и посмотрите, поможет ли она: https://github.com/aspnet/SignalR/issues/1400

Поскольку SignalR находится в режиме предварительного просмотра с asp.net core 2.1, вы должны убедиться, что все версии клиентских пакетов совпадают.Также необходимо настроить политику CORS

В ConfigureServices:

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

В Configure:

app.UseCors("CorsPolicy");
...