簡體   English   中英

ASP.NET Core 3.1 SignalR:DTO 導致集線器方法失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM