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

通过REST API获取2sxc数据:使用带参数的Pipeline查询

嘿,我刚好在DNN 9.2 + 2sxc的环境里折腾过类似的API扩展需求,给你梳理几个落地的关键步骤,应该能帮你快速推进开发:

核心思路

利用2sxc自带的WebAPI能力,结合你已有的Visual Pipeline查询,把筛选参数从API传递到查询中,实现动态数据过滤。

1. 改造Visual Query为参数化版本

你已经有了按大洲筛选的查询,现在给它加上参数支持:

  • 打开目标2sxc实例的Visual Query编辑器
  • 添加一个Query String节点(如果是内部调用也可以用Custom Value,但Query String更适合API传参)
  • 把这个参数节点和你的Entity Filter节点关联,设置筛选条件为你的大洲字段 == @参数名(比如Continent == @Continent)
  • 保存这个修改后的查询,记好它的名称(比如FilteredContinentData)

2. 编写2sxc WebAPI控制器

在你的2sxc App的api文件夹下新建一个控制器类,用来接收参数并调用查询:

using ToSic.Sxc.Api;
using ToSic.Sxc.Services;

public class ContinentDataApi : ApiController
{
    private readonly IQueryService _queryService;

    // 通过构造函数注入查询服务
    public ContinentDataApi(IQueryService queryService)
    {
        _queryService = queryService;
    }

    // 示例API端点:GET /DesktopModules/2sxc/API/ContinentDataApi/GetFiltered?continent=Asia
    public dynamic GetFiltered(string continent)
    {
        // 调用参数化的Visual Query,传入筛选参数
        var result = _queryService.Get("FilteredContinentData", new { Continent = continent });
        return result;
    }
}
  • 别忘了在App设置的API标签页,给这个控制器配置访问权限(比如允许匿名访问,或者指定角色)

3. 测试API有效性

部署后,直接在浏览器或者Postman里访问类似这样的URL,验证返回数据是否正确过滤:
/DesktopModules/2sxc/API/ContinentDataApi/GetFiltered?continent=Europe

4. 前端整合(对接现有标签/页面名称)

如果要通过页面上的标签点击触发过滤,写一段简单的JS逻辑就行:

// 假设你的筛选标签带有.continent-filter类
document.querySelectorAll('.continent-filter').forEach(tag => {
    tag.addEventListener('click', async () => {
        const targetContinent = tag.textContent.trim();
        // 调用API并处理返回数据
        const response = await fetch(`/DesktopModules/2sxc/API/ContinentDataApi/GetFiltered?continent=${encodeURIComponent(targetContinent)}`);
        const filteredData = await response.json();
        // 这里替换成你渲染数据的逻辑,比如更新页面列表
        renderFilteredItems(filteredData);
    });
});

额外小贴士

  • 参数验证:在控制器里加个判断,比如if(string.IsNullOrEmpty(continent)) return BadRequest("Continent参数不能为空");,避免无效请求
  • 性能优化:如果数据更新不频繁,可以给API方法加上[HttpCacheExpire(60)]特性,缓存查询结果
  • 多实例兼容:如果多个2sxc实例需要共用这个API,考虑把控制器放在一个通用的2sxc App里,或者通过App别名来区分

内容的提问来源于stack exchange,提问作者Andrew Birks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:10:01