![](/img/trans.png)
[英]Hub method from client is not invoking in ASP.NET Core SignalR
[英]ASP.NET Core 3.1 SignalR: DTOs cause hub method failure
我正在開發一個 ASP.NET Core 3.1 SignalR 應用程序,但我在第一個障礙中失敗了。 好的,這是第五關。
我的中心看起來像這樣:
public class ChatHub : Hub
{
public async Task SendMessage(object profile)
{
doSomethingWithProfile(profile);
}
}
這工作正常,因為我使用的是object
類型。 但是,我想使用強類型 DTO,如下所示:
public class ChatHub : Hub
{
public async Task SendMessage(ProfileDTO profile)
{
doSomethingWithProfile(profile);
}
}
但是,當我使用這種類型時,從不調用該方法,即使我絕對確定profile
對象與傳遞給它的數據的形狀相匹配:
public class ProfileDTO
{
public string given_name { get; set; }
public string family_name { get; set; }
public string nickname { get; set; }
public string name { get; set; }
public string picture { get; set; }
public string locale { get; set; }
public string updated_at { get; set; }
public string email { get; set; }
public string email_verified { get; set; }
public string sub { get; set; }
}
我確信這是一個非常簡單的配置選項,但我不知道如何! 任何人都可以幫忙嗎?
我可以像這樣將其轉換為 DTO:
public class ChatHub : Hub
{
public async Task SendMessage(object user)
{
ProfileDTO profileDto = ((JsonElement)user).ToObject<ProfileDTO>();
await Clients.All.SendAsync("ReceiveMessage", user);
}
}
public static class JsonElementExtensions
{
public static T ToObject<T>(this JsonElement element)
{
var json = element.GetRawText();
return JsonSerializer.Deserialize<T>(json);
}
public static T ToObject<T>(this JsonDocument document)
{
var json = document.RootElement.GetRawText();
return JsonSerializer.Deserialize<T>(json);
}
}
......但這似乎是一個非常多的跳躍。 有更容易的方法嗎?
我相信屬性名稱是 ProfileDTO 中的問題。 屬性名稱以小寫字母開頭,這會導致綁定問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.