Pergunta

Eu tenho uma Azure Mobile execução de Serviço da Web Api e c# e habilitado CORS, como sugerido na Habilitar o CORS no Azure Mobile Serviço .NET Back-end no entanto, tenho vindo agora para adicionar o SignalR na mistura.

SignalR é um trabalho muito bem, no entanto eu não posso ver para saber como ativar CORS.

No presente no meu aplicativo de teste de configuração eu tenho o seguinte:

//enable CORS for WebAPI
var cors = new EnableCorsAttribute("*", "*", "*");
httpconfig.EnableCors(cors);
//rather than use the static method new up SignalRExtensionConfig and pass the current config, hopefully allowing CORS...
var signalRConfig = new SignalRExtensionConfig();
signalRConfig.Initialize(httpconfig, ioc);

Mas o CORS não funciona para o SignalR hubs, funciona apenas com o WebAPI :( eu me frustrante:

Não 'Access-Control-Allow-Origin' cabeçalho está presente no pedido recurso.Origem 'null' não é, portanto, permitido o acesso.

Eu ter inspecionado os cabeçalhos de resposta e pode confirmar nada está sendo enviada de volta.

Alguém pode me aconselhar?

Foi útil?

Solução 2

Eu encontrei uma maneira de ativar o CORS para o SignalR, mas não parece o "Correto".Mas é o suficiente para começar a jogar com desenvolvimento até eu ouvir de volta de nossos Serviços Móveis amigos.

O Azure Mobile Services SignalR pacote do NuGet contém um OwinAppBuilderExtension classe.Essa classe é usada durante a inicialização para estender o Owin o programa de configuração para o signalr.Eu, então, uma subclasse este e atropelaram o ConfigureSignalR método.

Dentro deste método você tem acesso a IAppBuilder.Uma vez aqui, eu simplesmente adicionado appBuilder.UseCors(CorsOptions.AllowAll);antes da base.ConfigureSignalR(appBuilder);

Agora, isso está longe de ser ideal como eu ter ativado o CORS para tudo e disse para permitir todos.Mas para dev teste é OK e eu vou fornecer um personalizado CORS Política mais tarde qualquer como".

O último passo é definir o nosso novo subcclass(CORSSignalROwinAppBuilderExtension) para ser utilizada pelo nosso serviço.

Dentro de seu HttpConfig de instalação

 var configBuilder = new ConfigBuilder(options, (httpconfig, ioc) =>
 {
       ioc.RegisterInstance(new CORSSignalROwinAppBuilderExtension(httpconfig)).As<IOwinAppBuilderExtension>();
 });

Espero que isso ajude

Outras dicas

Eu estou usando o código a seguir para adicionar o CORS para SignalR em minha WebAPI projeto.Mas ele não está funcionando dentro de Serviço Móvel.Não sei se isso ajuda.

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.Map("/signalr", map =>
                {
                    // Setup the CORS middleware to run before SignalR.
                    // By default this will allow all origins. You can 
                    // configure the set of origins and/or http verbs by
                    // providing a cors options with a different policy.
                    map.UseCors(CorsOptions.AllowAll);
                    var hubConfiguration = new HubConfiguration
                    {
                        // You can enable JSONP by uncommenting line below.
                        // JSONP requests are insecure but some older browsers (and some
                        // versions of IE) require JSONP to work cross domain
                        // EnableJSONP = true
                        EnableJavaScriptProxies = false
                    };
                    // Run the SignalR pipeline. We're not using MapSignalR
                    // since this branch already runs under the "/signalr" path.
                    map.RunSignalR(hubConfiguration);
                });
        }
    }

Colado como uma resposta, já que ele não multi-códigos de linha de comentário.Por favor, ignore se não ajuda.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top