return 匿名类型响应 HTTP GET 请求是好的做法吗?

Is it good practice to return anonymous type in respond to HTTP GET request?

我的网站 API 其中 ProductsByCategory 的 GET 端点之一 return 集合。

 public async Task<ActionResult<IEnumerable<ProductsByCategory>>> GetProductsByCategories()
 {
        var productsByCategories = await northwindContext.Categories.Select(category => new ProductsByCategory
        {
            CategoryName = category.CategoryName,
            ProductCount = category.Products.Count
        }
        ).ToListAsync();

        return productsByCategories;
 }

但我知道 JSON 甚至 XML 不需要类型名称。他们只需要 属性 的名称及其值。所以我有另一种方法来实现这个方法(使用匿名类型):

    public async Task<ActionResult<IEnumerable>> GetProductsByCategories()
    {
        var productsByCategories = await northwindContext.Categories.Select(category => new 
        {
            CategoryName = category.CategoryName,
            ProductCount = category.Products.Count
        }
        ).ToListAsync();

        return productsByCategories;
    }

我喜欢第二种方法,因为我不需要编写 ProductsByCategory 等类型的代码,而且在我看来更合乎逻辑,因为 JSON(XML) 不需要类型名称 I不需要创建非匿名类型。但这就是我的全部想法,我在 ASP .NET Core 领域还很陌生,我可能会遗漏某些部分,而且我的猜测是错误的。那么传递匿名类型的集合作为对 HTTP GET 请求的响应是好的做法还是指定集合保留的项目类型更好?

没错,您将得到相同的结果序列化对象(xml、json),并且您可以使用匿名类型。但你应该记住:

  1. 当您明确定义结果 class 时,您的代码将是 清洁工
  2. 对于明确定义的结果 class 您可以定义一些验证 使用序列化器属性的规则
  3. 如果您使用文档工具,例如 swagger,您还可以使用属性来提供额外的文档。

Api不应该有歧义。 一切都取决于您的喜好。如果你想使用匿名类型,你可以。