c# - origin - SignalR CORS en Azure Mobile Services Web Api
signalr script (2)
Estoy usando el siguiente código para agregar CORS a SignalR 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 códigos de varias líneas en el comentario. Por favor ignore si no ayuda.
Tengo un servicio móvil de Azure que ejecuta Web Api y c # y habilité CORS como se sugiere en Habilitar CORS en Azure Mobile Serivce .NET Backend; sin embargo, ahora he venido a agregar SignalR a la mezcla.
SignalR funciona bien, pero no puedo ver cómo habilitar CORS.
En la actualidad 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 CORS no funciona para concentradores SignalR, solo funciona para WebAPI :( Me da lo frustrante:
Ningún encabezado ''Access-Control-Allow-Origin'' está presente en el recurso solicitado. Por lo tanto, el origen ''nulo'' no está permitido.
He inspeccionado los encabezados de respuesta y puedo confirmar que no se envía nada.
¿Alguien puede aconsejar?
He encontrado una manera de habilitar CORS para SignalR pero no parece la forma "Correcta". Pero es suficiente para jugar con el desarrollo hasta que recibamos noticias de nuestros amigos de Servicios móviles.
El paquete Azure Mobile Services SignalR NuGet contiene una clase OwinAppBuilderExtension. Esta clase se usa durante el inicio para extender la configuración de Owin para el señalizador. Luego subclasé esto y anulé el método ConfigureSignalR.
Dentro de este método, tienes acceso a IAppBuilder. Una vez aquí simplemente agregué appBuilder.UseCors (CorsOptions.AllowAll); antes de base.ConfigureSignalR (appBuilder);
Ahora bien, esto está lejos de ser ideal ya que habilité CORS para todo y dije que permitía todo. Pero para las pruebas de desarrollo, esto está bien y proporcionaré una Política de CORS personalizada más adelante.
El último paso es establecer nuestro nuevo subclass (CORSSignalROwinAppBuilderExtension) para ser utilizado por nuestro servicio.
Dentro de su configuración de HttpConfig
var configBuilder = new ConfigBuilder(options, (httpconfig, ioc) =>
{
ioc.RegisterInstance(new CORSSignalROwinAppBuilderExtension(httpconfig)).As<IOwinAppBuilderExtension>();
});
Espero que esto ayude