using Dpz.Core.EnumLibrary;

namespace Dpz.Core.Web.Controllers;

public class SteamController(ISteamGameService steamGameService) : Controller
{
    public async Task<IActionResult> Index(CancellationToken cancellationToken)
    {
        this.SetTitle("我的Steam游戏");
        var games = await steamGameService.GetGamesAsync(cancellationToken);
        return View(games);
    }

    public async Task<IActionResult> Achievements(
        int? id = null,
        CancellationToken cancellationToken = default
    )
    {
        if (id == null)
        {
            return NotFound();
        }

        var model = await steamGameService.GetGameAsync(id.Value, cancellationToken);

        if (model == null)
        {
            return NotFound();
        }

        var pageMetaPage = new VmPageMetadata
        {
            Description =
                "游戏成就:" + string.Join(",", model.Achievements.Select(x => x.DisplayName)),
            Keywords = [$"{model.Name},{model.Name}游戏成就"],
            Relations = ["Steam", "Achievements", id.Value.ToString()],
        };
        ViewData["PageMetadata"] = pageMetaPage;
        this.SetTitle($"{model.Name} 成就");
        return View(model);
    }

    [HttpGet, CheckAuthorize(Permissions = Permissions.System)]
    public async Task<IActionResult> ClearCache(CancellationToken cancellationToken)
    {
        await steamGameService.RemoveByPrefixAsync(cancellationToken);
        return RedirectToAction(nameof(Index));
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这是一个ASP.NET Core MVC控制器,用于处理Steam游戏相关的Web请求。让我详细解释一下这个代码:

控制器概述

public class SteamController(ISteamGameService steamGameService) : Controller
  • 这是一个名为SteamController的控制器类
  • 使用了C# 12的主构造函数语法,通过依赖注入接收ISteamGameService服务
  • 继承自Controller基类,提供MVC控制器的基本功能

主要Action方法

1. Index方法 - 游戏列表页面

public async Task<IActionResult> Index(CancellationToken cancellationToken)
{
    this.SetTitle("我的Steam游戏");
    var games = await steamGameService.GetGamesAsync(cancellationToken);
    return View(games);
}
  • 功能:显示Steam游戏列表的主页面
  • 操作
    • 设置页面标题为"我的Steam游戏"
    • 异步获取游戏数据
    • 返回包含游戏数据的视图

2. Achievements方法 - 游戏成就页面

public async Task<IActionResult> Achievements(
    int? id = null,
    CancellationToken cancellationToken = default
)
  • 功能:显示特定游戏的成就信息
  • 参数
    • id:游戏ID(可空)
    • cancellationToken:取消令牌
  • 逻辑流程
    1. 验证游戏ID是否存在
    2. 根据ID获取游戏详情
    3. 如果游戏不存在,返回404
    4. 构建页面元数据(SEO信息)
    5. 设置页面标题
    6. 返回游戏成就视图

页面元数据配置

var pageMetaPage = new VmPageMetadata
{
    Description = "游戏成就:" + string.Join(",", model.Achievements.Select(x => x.DisplayName)),
    Keywords = [$"{model.Name},{model.Name}游戏成就"],
    Relations = ["Steam", "Achievements", id.Value.ToString()],
};

3. ClearCache方法 - 清除缓存

[HttpGet, CheckAuthorize(Permissions = Permissions.System)]
public async Task<IActionResult> ClearCache(CancellationToken cancellationToken)
  • 功能:清除Steam相关的缓存数据
  • 权限:需要系统权限(通过CheckAuthorize特性验证)
  • HTTP方法:仅接受GET请求
  • 操作
    • 调用服务清除缓存
    • 重定向回首页

主要特性

  1. 异步编程:所有方法都使用async/await模式,支持取消令牌
  2. 依赖注入:通过构造函数注入Steam游戏服务
  3. 权限控制:清除缓存功能需要系统权限
  4. SEO友好:为成就页面配置了详细的元数据
  5. 错误处理:对无效ID返回404响应
  6. 用户体验:设置了中文页面标题

这个控制器主要用于Steam游戏管理系统,提供游戏列表浏览、成就查看和缓存管理功能。

评论加载中...