Pregunta

Tengo un servicio móvil de Azure que ejecuta API web y C # y habilitó a CORS como se sugiere en Habilitar cors en Azure Mobile Serivce .NET Backend Sin embargo, ahora he venido a agregar señalR a la mezcla.

Signalr está funcionando bien Sin embargo, no puedo ver cómo habilitar las CORS.

Actualmente en mi configuración de la aplicación de prueba Tengo lo siguiente:

//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);

Pero las cors no funcionan para los centros de SignoR, solo funciona para WEBAPI :( Me siento frustrante:

No se presenta el encabezado de "Access-Control-Control-Permeen-Origin" en el Solicitado recurso.Por lo tanto, el origen 'null' no tiene permitido acceso.

He inspeccionado los encabezados de respuesta y puedo confirmar que no se está enviando nada.

¿Puede alguien aconsejarlo?

¿Fue útil?

Solución 2

He encontrado una manera de habilitar las cors para Signalr, pero no parece la forma "correcta".Pero es suficiente para jugar con el desarrollo hasta que escuche de nuestros amigos de servicios móviles.

El paquete Azure Mobile Services Signalr Nuget contiene una clase OwinAppBuilectExtension.Esta clase se utiliza durante el inicio para ampliar la configuración de OWIN para Signalr.Luego subclase esto y anule el método ConfiguresIndicalr.

Dentro de este método, obtienes acceso a IAPPBuilder.Una vez aquí, simplemente agregué AppBuilder.usecors (corsopciones.allowlall);antes de la base.configuresignalr (AppBuilder);

Ahora, esto está lejos de ser ideal, ya que he habilitado las cors para todo y se dice que lo permiten.Pero para las pruebas de DEV, esto está bien y proporcionaré una política de CORS personalizada más tarde sobre cómo.

El paso final es establecer nuestra nueva Subclase (CorssignalrowinAppBuilectExteStenstension) para ser utilizada por nuestro servicio.

dentro de su configuración httpconfig

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

Espero que esto ayude

Otros consejos

Estoy usando el código a continuación para agregar cors a SigneR en mi proyecto WEBAPI.Pero no se está ejecutando dentro del servicio móvil.No estoy seguro si esto ayuda.

    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);
                });
        }
    }

pegado como respuesta ya que no tiene comentarios de códigos multilínea.Por favor ignore si no ayuda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top