Вопрос

У меня есть Azure Mobile Service, работающий на веб-API и C # и с включенным CORS, как предложено в Включить CORS на Azure Mobile Serivce .NET Backend Однако теперь я пришел добавить Synolr в смесь.

Sivingr работает нормально, однако я не вижу, чтобы найти, как включить CORS.

В настоящее время в моем тестовом конфиге приложения У меня есть следующее:

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

Но CORS не работает для Hubs Signalr, он работает только для webapi :( Я получаю расстраивание:

Нет заголовка «Access-Control-Play-origer», присутствует на запрошенном ресурс.Поэтому происхождение «NULL» не допускается доступом.

Я проверил заголовки ответа и можете подтвердить, что ничего не отправляется.

может кто-нибудь посоветовать?

Это было полезно?

Решение 2

Я нашел способ включить CORS для Signalr, но он не кажется «правильным» способом.Но достаточно играть с разработкой, пока не слышу от наших друзей мобильных услуг.

Пакет Azure Mobile Services Signalr Nuget содержит класс OwinappBuildExtence.Этот класс используется во время запуска, чтобы расширить настройку OWIN для Signalr.Затем я подклассировал это и перебросил метод ConfigurSignalr.

Внутри этого метода вы получаете доступ к IAPPBUILDER.Однажды здесь я просто добавил AppBuilder.Usecors (Corsoptions.allowall);перед base.configuregrageignr (AppBuilder);

Теперь это далеко не идеально, так как я позволил всем сбрасывать и сказал все.Но для проверки DEV это нормально, и я предоставим пользовательскую политику CORS позже какую-то как.

Последний шаг - установить нашу новую подкруку (CorssignalRowinAppBuilderextence), который должен использоваться нашим сервисом.

В пределах настроек httpconfig

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

Надеюсь, это поможет

Другие советы

Я использую код ниже, чтобы добавить CORS в Signalr в моем проекте Webapi.Но он не работает внутри мобильного сервиса.Не уверен, что это поможет.

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

вставлен как ответ, поскольку он не многострочных кодов в комментарии.Пожалуйста, игнорируйте, если это не поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top