SignalR CORS no Azure Mobile Services Web Api
-
21-12-2019 - |
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?
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.