Blazor消费Web API遇阻:LINQ提取歌手名等数据求助
修正Blazor中Genius API数据提取的LINQ语句
错误定位
- 属性名称错误:原代码中使用的
primary_title并非Genius API返回的标准字段,实际歌曲标题对应字段为title,歌手名对应primary_artist.name,发行日期对应release_date(以Genius公开API的响应结构为准) - 语法错误:
.ToList().T属于笔误,应为完整的.ToList()方法调用
修正后的完整代码实现
1. 定义DTO与API响应模型
// 用于前端展示的歌曲数据DTO public class SongDto { public string ArtistName { get; set; } public string SongTitle { get; set; } public DateTime? ReleaseDate { get; set; } } // Genius API的响应根模型 public class GeniusSearchResponse { public List<GeniusHit> Hits { get; set; } } // Genius API返回的单条歌曲数据模型 public class GeniusHit { public GeniusSong Result { get; set; } } public class GeniusSong { public string Title { get; set; } public GeniusArtist Primary_Artist { get; set; } public string Release_Date { get; set; } } public class GeniusArtist { public string Name { get; set; } }
2. 修正后的SongService实现
public class SongService { private readonly HttpClient _httpClient; private const string GeniusApiBaseUrl = "https://api.genius.com/search?q="; // 记得替换为你的Genius API密钥 private const string GeniusApiKey = "YOUR_API_KEY_HERE"; public SongService(HttpClient httpClient) { _httpClient = httpClient; _httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {GeniusApiKey}"); } public async Task<List<SongDto>> GetSongsAsync(string searchQuery) { var apiUrl = $"{GeniusApiBaseUrl}{Uri.EscapeDataString(searchQuery)}"; var response = await _httpClient.GetFromJsonAsync<GeniusSearchResponse>(apiUrl); // 修正LINQ映射逻辑,修复字段错误与语法问题 return response?.Hits.Select(hit => { var song = hit.Result; DateTime.TryParse(song.Release_Date, out var releaseDate); return new SongDto { ArtistName = song.Primary_Artist?.Name, SongTitle = song.Title, ReleaseDate = releaseDate == default ? null : releaseDate }; }).ToList() ?? new List<SongDto>(); } }
核心修正说明
- 字段映射修正:根据Genius API实际响应结构,歌曲标题来自
Result.Title,歌手名来自Result.Primary_Artist.Name,替换了原代码中错误的primary_title字段 - 语法修复:移除无效的
.ToList().T笔误,使用正确的.ToList()完成集合转换 - 日期安全处理:通过
DateTime.TryParse避免发行日期格式异常导致的程序崩溃,同时处理空值情况
内容的提问来源于stack exchange,提问作者thedublinbloke
相关产品推荐
相关产品推荐

