C# 如何使用信号器将json对象发送到.net服务器
我正在开发一个Angular应用程序,我必须使用.netcore服务器和signar将数据从Angular表单发送到外部服务器。我能够使用SignalrHub在Angular客户端和控制器之间建立连接,但我不知道如何将json对象从客户端发送到控制器。我想从控制器将Json对象发送到外部服务器。我想使用signalr实现这一点,因为我想在外部服务器和客户端之间进行实时通信。当我提交数据并收到来自外部服务器的响应时,我想提醒客户端。我正在寻找一些关于如何实现这一点的指导 棱角客户端C# 如何使用信号器将json对象发送到.net服务器,c#,angular,typescript,asp.net-core,signalr,C#,Angular,Typescript,Asp.net Core,Signalr,我正在开发一个Angular应用程序,我必须使用.netcore服务器和signar将数据从Angular表单发送到外部服务器。我能够使用SignalrHub在Angular客户端和控制器之间建立连接,但我不知道如何将json对象从客户端发送到控制器。我想从控制器将Json对象发送到外部服务器。我想使用signalr实现这一点,因为我想在外部服务器和客户端之间进行实时通信。当我提交数据并收到来自外部服务器的响应时,我想提醒客户端。我正在寻找一些关于如何实现这一点的指导 棱角客户端 _hubCon
_hubConnection: HubConnection;
transportType = signalR.HttpTransportType.LongPolling;
ngOnInit() {
this._hubConnection = new signalR.HubConnectionBuilder()
.configureLogging(signalR.LogLevel.Information)
.withUrl("http://localhost:5000/message", this.transportType)
.build();
}
fun1(){
this._hubConnection.on("Send", (user, message) => {
const received = `name: ${user}, message: ${message}`;
console.log(received);
});
this._hubConnection.start()
.then(() =>
this._hubConnection.invoke('Send', "rk", "wassup").catch(function (err) {
console.error(err.toString());
})
)
.then(() =>
console.log('connected')
)
.then(() => this._hubConnection.stop())
.then(() => console.log('Disconnected'))
.catch(e => console.error(e.message));
控制器
namespace ang.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class DistController : Controller
{
private IHubContext<DistHub> _hubContext;
public DistController(IHubContext<DistHub> hubContext)
{
_hubContext = hubContext;
}
}
}
startup.cs
app.UseSignalR(routes =>
{
routes.MapHub<DistHub>("/message");
});
您可以通过将根数据传递给invoke来实现这一点
connection.invoke('Send', "rk", "wassup", Root);
然后在集线器中为根数据添加另一个参数
public async Task Send (string user , string message, string root)
{
await Clients.All.SendAsync("Send", user, message);
}
更新,因为您正在提交可以使用的json字符串
JsonConvert.DeserializeObject<List<object>>(root);
JsonConvert.DeserializeObject(根);
如果要从客户端发送的json数据是已知的固定格式,则可以让Hub方法接受自定义对象参数,如下所示
集线器法
public async Task GetCustomData(string user, Root data)
{
var sub_val2 = data.test1.sub[0].val2.ToString();
//code logic here
await Clients.All.SendAsync("ReceiveMessage", user, "{message_here}");
}
自定义类
public class Root
{
public string Unit { get; set; }
public List<Test> test { get; set; }
public Test1 test1 { get; set; }
}
public class Test
{
public bool Val { get; set; }
public bool Val1 { get; set; }
}
public class Test1
{
public List<Sub> sub { get; set; }
}
public class Sub
{
public string val2 { get; set; }
public string Val3 { get; set; }
}
公共类根目录
{
公共字符串单元{get;set;}
公共列表测试{get;set;}
公共Test1 Test1{get;set;}
}
公开课考试
{
公共布尔值{get;set;}
公共布尔值1{get;set;}
}
公共类Test1
{
公共列表子{get;set;}
}
公开课小组
{
公共字符串val2{get;set;}
公共字符串Val3{get;set;}
}
测试结果
此外,正如Tony Ngo所共享的,修改Hub方法使其接受另一个对象类型参数也是可以的 嗨@Tony Ngo,谢谢你抽出时间。我已经尝试了上述解决方案。如何从角度读取“根”对象的值。我在c#中为根对象创建了一个模型,它包含一个类“Root”。是否可以将数据显示到控制台以验证数据是否正确。您可以在visual Studio OK中运行调试模式。我会检查的。你能解释一下什么是“根”对象吗。它是根模型中的Josn对象“Root”还是“Root”类。您的json似乎没有强类型,因此我认为您可以在c#中使用
object
数据。你可以在这里查一下
public async Task GetCustomData(string user, Root data)
{
var sub_val2 = data.test1.sub[0].val2.ToString();
//code logic here
await Clients.All.SendAsync("ReceiveMessage", user, "{message_here}");
}
public class Root
{
public string Unit { get; set; }
public List<Test> test { get; set; }
public Test1 test1 { get; set; }
}
public class Test
{
public bool Val { get; set; }
public bool Val1 { get; set; }
}
public class Test1
{
public List<Sub> sub { get; set; }
}
public class Sub
{
public string val2 { get; set; }
public string Val3 { get; set; }
}