我正在尝试为离子应用程序发送和接收信令消息开发一个简单的概念证明。我有一个非常简单的Signalr Web应用程序,它内置于.net 4.5中,可以成功地从应用程序主机内的已连接客户端发送和接收消息。
我现在正在尝试通过离子应用程序与此连接,但我收到消息
访问“ http://localhost:59621/signalr/negotiate”处的XMLHttpRequest 来自来源“ http://localhost:8100”的信息已被CORS政策阻止: 对预检请求的响应未通过访问控制检查: 响应中“ Access-Control-Allow-Origin”标头的值必须 当请求的凭据模式为时,不是通配符“ *” “包含”。
尝试建立与信号中心之间的连接时。
非常感谢您的协助。
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
EnableDetailedErrors = true,
};
map.RunSignalR(hubConfiguration);
});
}
}
[HubName("ChatHub")]
public class ChatHub : Hub
{
public void Send(string name, string message)
{
// Call the addNewMessageToPage method to update clients.
Clients.All.addNewMessageToPage(name, message);
}
}
import { Component } from '@angular/core';
import { NavController, DateTime, AlertController } from 'ionic-angular';
import { HubConnection, HubConnectionBuilder } from '@aspnet/signalr';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
hubConnection: HubConnection;
name: string;
message: string;
messages: string[] = [];
constructor(public navCtrl: NavController, public alertCtrl: AlertController) {
}
ionViewDidLoad() {
}
ionViewWillEnter() {
let alert = this.alertCtrl.create({
title: 'Demo',
message: 'What is your name?',
inputs: [
{
name: 'Name',
placeholder: 'Name'
}
],
buttons: [
{
text: 'Enter',
handler: data => {
this.name = data.Name;
}
}
]
});
alert.present();
this.hubConnection = new HubConnectionBuilder().withUrl('http://localhost:59621/signalr').build();
this.hubConnection
.start()
.then(() => console.log('Connection started!'))
.catch(err => {
debugger;
console.log('Error while establishing connection :(')
});
this.hubConnection.on('addNewMessageToPage', (name: string, receivedMessage: string) => {
const text = `${name}: ${receivedMessage}`;
this.messages.push(text);
});
}
sendMessage() {
this.hubConnection
.invoke('send', this.name, this.message)
.then(() => this.message = '')
.catch(err => console.error(err));
}
}
离子:
ionic(Ionic CLI):4.0.6
离子框架:离子角3.9.3
@ ionic / app-scripts:3.2.1
科尔多瓦:
cordova(Cordova CLI):8.1.0 Cordova平台:无
系统:
NodeJS:v8.11.0(C:\ Program Files \ nodejs \ node.exe) npm:5.6.0 作业系统:Windows 10
环境:
ANDROID_HOME:未设置
答案 0 :(得分:0)
问题在于,ionic的信号发送器插件需要.Net Core后端。我一直在尝试使用.Net Framework后端。
答案 1 :(得分:0)
您的代码很好。与CORS相关的问题。因此,您应该按照以下步骤运行
然后在该浏览器上运行肯定可以。谢谢