Azure Mobile Services Web Api上的SignalR CORS
我有一个运行Web Api和c#的Azure移动服务,并按照在Azure Mobile Serivce .NET后端启用CORS中的建议启用了CORS,但是现在我已经将SignalR添加到了混合中。
SignalR工作正常,但我看不到如何启用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不适用于SignalR集线器,它仅适用于WebAPI :(我感到沮丧:
请求的资源上不存在“Access-Control-Allow-Origin”标头。 因此不允许原点’null’访问。
我已经检查了响应头并且可以确认没有发送回任何内容。
任何人都可以建议吗?
我正在使用下面的代码在我的WebAPI项目中将CORS添加到SignalR。 但它并没有在移动服务中运行。 不确定这是否有帮助。
公共课启动 { public void Configuration(IAppBuilder app) { app.Map(“/ signalr”,map => { //设置CORS中间件在SignalR之前运行。 //默认情况下,这将允许所有来源。 您可以 //通过配置起源和/或http动词集 //使用不同的策略提供cors选项。 map.UseCors(CorsOptions.AllowAll); var hubConfiguration = new HubConfiguration { //您可以通过取消注释下面的行来启用JSONP。 // JSONP请求是不安全的,但是一些旧的浏览器(以及一些 // IE的版本)需要JSONP才能跨域工作 // EnableJSONP = true EnableJavaScriptProxies = false }; //运行SignalR管道。 我们没有使用MapSignalR //因为这个分支已经在“/ signalr”路径下运行了。 map.RunSignalR(hubConfiguration); }); } }
作为答案粘贴,因为评论中没有多行代码。 如果它没有帮助,请忽略。
我找到了一种为SignalR启用CORS的方法,但它似乎并不是“正确”的方式。 但是,在我从移动服务的朋友那里收到回复之前,它足以让我们参与开发。
Azure移动服务SignalR NuGet包中包含OwinAppBuilderExtension类。 在启动期间使用此类来扩展信号器的Owin设置。 然后我将其子类化并覆盖ConfigureSignalR方法。
在此方法中,您可以访问IAppBuilder。 在这里,我只需添加appBuilder.UseCors(CorsOptions.AllowAll); 在base.ConfigureSignalR(appBuilder)之前;
现在这远非理想,因为我已经为所有内容启用了CORS,并且说允许所有内容。 但是对于开发测试,这是可以的,我将在以后的任何方式提供自定义CORS策略。
最后一步是设置我们的服务使用的新子类(CORSSignalROwinAppBuilderExtension)。
在您的HttpConfig设置中
var configBuilder = new ConfigBuilder(options, (httpconfig, ioc) => { ioc.RegisterInstance(new CORSSignalROwinAppBuilderExtension(httpconfig)).As(); });
希望这可以帮助
- Web.Config 中的defaultRedirect问题
- 有问题的MVC控制器上的Async vs Sync基准测试
- 从类属性获取绑定值,DefaultBindingProperty对我不起作用!
- GetResponse()上500内部服务器错误
- 如何更改所有月份所有工作日的颜色属性
- TimeSpan FormatString,可选小时
- 发布错误:无法加载文件或程序集“Microsoft.Web.XmlTransform”,Version = 1.4.0.0,Culture = neutral等等或其依赖项之一
- 如何在ASP.NET DataRepeater控件中执行条件逻辑?
- 在asp.net中序列化会话状态