Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用信号器将json对象发送到.net服务器_C#_Angular_Typescript_Asp.net Core_Signalr - Fatal编程技术网

C# 如何使用信号器将json对象发送到.net服务器

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

我正在开发一个Angular应用程序,我必须使用.netcore服务器和signar将数据从Angular表单发送到外部服务器。我能够使用SignalrHub在Angular客户端和控制器之间建立连接,但我不知道如何将json对象从客户端发送到控制器。我想从控制器将Json对象发送到外部服务器。我想使用signalr实现这一点,因为我想在外部服务器和客户端之间进行实时通信。当我提交数据并收到来自外部服务器的响应时,我想提醒客户端。我正在寻找一些关于如何实现这一点的指导

棱角客户端

_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; }
}