Signalr CORS на Azure Mobile Services Web API
-
21-12-2019 - |
Вопрос
У меня есть Azure Mobile Service, работающий на веб-API и C # и с включенным CORS, как предложено в
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); }); } }.
вставлен как ответ, поскольку он не многострочных кодов в комментарии.Пожалуйста, игнорируйте, если это не поможет.