using System.Xml.Serialization;
namespace Dpz.Core.Web.Library.Activator;
#region Sitemap XML Models
[XmlRoot("urlset", Namespace = "http://www.sitemaps.org/schemas/sitemap/0.9")]
public class SitemapUrlSet
{
[XmlElement("url")]
public List<SitemapUrl> Urls { get; set; } = [];
}
[Serializable]
[XmlRoot("url")]
public class SitemapUrl
{
[XmlElement("loc")]
public string? Location { get; set; }
[XmlElement("lastmod")]
public string LastModified { get; set; } = DateTime.Now.ToString("yyyy-MM-dd");
[XmlElement("changefreq")]
public string ChangeFrequency { get; set; } = "weekly";
[XmlElement("priority")]
public float Priority { get; set; }
}
[XmlRoot("sitemapindex", Namespace = "http://www.sitemaps.org/schemas/sitemap/0.9")]
public class SitemapIndex
{
[XmlElement("sitemap")]
public List<SitemapEntry> Sitemaps { get; set; } = [];
}
[Serializable]
[XmlRoot("sitemap")]
public class SitemapEntry
{
[XmlElement("loc")]
public string? Location { get; set; }
[XmlElement("lastmod")]
public string LastModified { get; set; } = DateTime.Now.ToString("yyyy-MM-dd");
}
#endregion
#region SignalR Push Message
/// <summary>
/// 消息类型
/// </summary>
public enum MessageLevel
{
/// <summary>
/// 信息/成功
/// </summary>
Info = 0,
/// <summary>
/// 警告/进行中
/// </summary>
Warning = 1,
/// <summary>
/// 错误
/// </summary>
Error = 2
}
/// <summary>
/// 站点地图生成进度推送消息
/// </summary>
/// <param name="Message">推送消息内容</param>
/// <param name="Timestamp">推送时间</param>
/// <param name="Level">消息级别</param>
public record SitemapProgressMessage(string Message, DateTime Timestamp, MessageLevel Level)
{
/// <summary>
/// 创建信息消息
/// </summary>
public static SitemapProgressMessage Info(string message) =>
new(message, DateTime.Now, MessageLevel.Info);
/// <summary>
/// 创建警告消息
/// </summary>
public static SitemapProgressMessage Warning(string message) =>
new(message, DateTime.Now, MessageLevel.Warning);
/// <summary>
/// 创建错误消息
/// </summary>
public static SitemapProgressMessage Error(string message) =>
new(message, DateTime.Now, MessageLevel.Error);
}
#endregion
#region Sitemap Configuration
/// <summary>
/// 站点地图配置
/// </summary>
public class SitemapConfiguration
{
/// <summary>
/// 网站基础 URL
/// </summary>
public string BaseUrl { get; set; } = "https://core.dpangzi.com";
/// <summary>
/// 单个 sitemap 最大 URL 数量 (协议限制 50000)
/// </summary>
public int MaxUrlsPerSitemap { get; set; } = 10000;
/// <summary>
/// 每批查询的数据量
/// </summary>
public int BatchSize { get; set; } = 500;
}
#endregion
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这个代码文件定义了用于生成和管理网站站点地图(Sitemap)的相关类和配置。让我详细解释每个部分:
1. Sitemap XML 模型 (第一个region)
这部分定义了符合 Sitemap 协议标准的 XML 数据模型:
SitemapUrlSet 类
- 表示标准的 sitemap.xml 文件结构
- 使用
XmlRoot特性指定根元素为 "urlset",命名空间符合官方协议 - 包含一个 URL 列表,每个 URL 都是
SitemapUrl对象
SitemapUrl 类
- 表示 sitemap 中的单个 URL 条目
- 包含四个标准字段:
Location: URL 地址LastModified: 最后修改时间(默认当前日期)ChangeFrequency: 更新频率(默认每周)Priority: 优先级权重
SitemapIndex 和 SitemapEntry 类
- 用于大型网站的 sitemap 索引文件
- 当 URL 数量超过单个文件限制时,使用索引文件管理多个 sitemap 文件
2. SignalR 推送消息 (第二个region)
这部分定义了实时消息推送功能:
MessageLevel 枚举
- 定义三种消息级别:信息、警告、错误
- 用于在生成 sitemap 过程中向客户端推送不同类型的状态消息
SitemapProgressMessage 记录类型
- 使用 C# 9+ 的 record 语法定义不可变消息对象
- 包含消息内容、时间戳和级别
- 提供三个静态工厂方法快速创建不同级别的消息
3. Sitemap 配置 (第三个region)
SitemapConfiguration 类
- 定义 sitemap 生成的配置参数:
BaseUrl: 网站基础 URLMaxUrlsPerSitemap: 单个 sitemap 文件最大 URL 数量(遵循协议限制)BatchSize: 数据库批量查询大小,用于优化性能
整体设计特点
- 标准兼容: 严格遵循 Sitemaps 协议规范
- 可扩展性: 支持大型网站的多文件 sitemap 结构
- 实时反馈: 通过 SignalR 提供生成过程的实时状态更新
- 性能优化: 通过批处理和配置化参数优化大数据量处理
- 现代语法: 使用了 C# 的现代特性如 record、集合初始化器等
这个设计非常适合企业级 Web 应用的 SEO 优化需求。
评论加载中...