You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:55:16