c# - 无法通过 Tableau REST API 返回用户收藏夹

标签 c# tableau-api

更新:2019 年 9 月。

此 API 调用现在可以按预期工作。 Tableau 端的问题似乎已经解决,调用现在返回正确的数据。

============================================= ================

我正在通过 C# 使用 Tableau REST API 来尝试获取用户收藏列表。 我知道用户有一些,因为是我。 我尝试过使用 API 版本 2.8、3.0、3.1 和 3.2,但几乎没有任何乐趣。 2.8 和 3.0 响应:

<?xml version='1.0' encoding='UTF-8'?>
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.8.xsd"> //3.0.xsd when using API Version 3.0
     <favorites/> //There should be a plethora of favorites of all varieties in here.
</tsResponse>

3.1 和 3.2 给我一个 (404) Not found。

我在 C# 中的代码是:

public static string QueryFavourites(string APIVersion, string AuthToken, string SiteID, string UserID)
    {
        string result = "";
        try
        {
            string url = $@"{Server}/api/{APIVersion}/sites/{SiteID}/favorites/{UserID}";
            // Create the web request 
            WebRequest request = WebRequest.Create(url) as WebRequest;
            request.PreAuthenticate = true;
            request.Headers.Add($"x-tableau-auth: {AuthToken}");

            // Get response 
            using (WebResponse response = request.GetResponse())
            {
                // Get the response stream 
                StreamReader reader = new StreamReader(response.GetResponseStream());

                // Read the whole contents and return as a string 
                result = reader.ReadToEnd();
            }
            return result;
        }
        catch(Exception E)
        {
            logger.Error("Error! System Says: " + E.Message);
            return result;
        }
    }

我知道该方法有效,因为它用于多个其他 API 调用,每个调用使用不同的 URL(取决于调用)。 有谁知道这是画面端还是我端的问题? 显然它应该与我们拥有的 Tableau Server 2.8 或更高版本一起使用。 (我想我们运行的是 2018.1)

是否有人能够使用 Tableau REST API 获取用户的收藏夹列表? 我哪里错了?

(我还在 Tableau Forum 上发布了问题。)

更新:

我在下面的屏幕截图中包含了请求的 CURL 和 header 以及结果。 (我使用“ReSTLet Client”而不是“Postman”,所以屏幕截图来自前者。)ID 和身份验证 token 已被删除,因为它们是敏感信息,我认为我的公司不会乐意将它们放在面向公众的互联网。 所有 ID 和授权 key 均大小写正确且显示正确。它们成功地用于其他几个 API 调用,并通过 API 直接从 Tableau 中提取。

我发现的异常(exception)是无法找到我正在调用的 API 的版本。所以 v2.6 - v2.8 和 v3.0 都“有效”。其他版本返回 404001 VERSION_NOT_FOUND 错误。

enter image description here

enter image description here

最佳答案

我会采取的方法是:

  1. Query a user on the site. (拥有收藏夹的用户)

  2. 检查用户是否确实:以及您要查询收藏夹的同一用户

  3. 如果它们相同,请尝试使用 REST API(DataSourceViewWorkbook)添加收藏

  4. Get the favorites for the user ,您添加为收藏夹的数据源/ View /工作簿应该在那里。

如果你想Update the user , Add user to siteAdd user to Group , 我添加了指向文档的链接

您可以使用您选择的 Postman/工具来完成这些事情。

您还可以尝试确保查询另一个用户(或同一用户)的用户是服务器管理员(只是为了安全起见),并确保您是另一个(或相同)用户。

希望这对您有所帮助!

编辑:也许您可以尝试向站点添加一个具有常规组的新用户,确保您也是该站点的成员。之后添加收藏夹并为组常规用户获取收藏夹。如果这不起作用,您可以验证除了管理员之外,是否也无法为组常规用户获得收藏夹。

关于c# - 无法通过 Tableau REST API 返回用户收藏夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54036082/

相关文章:

filter - 隐藏筛选器中的值 - Tableau

python - 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

c# - 带有动态下拉列表列的 GridView 中的动态 ItemTemplate

javascript - 使用 jquery 发布数据时没有为此对象定义无参数构造函数

c# - ASP.NET MVC : ModelState vs. 模型状态字典

c# - 将命令绑定(bind)到 ItemTemplate 内的按钮

c# - EF 核心 : Create a SQL user-defined type from a C# class

python - 如何检查python中的tableau server中是否存在工作簿

python - 如何在python中的tableau服务器上创建新用户

if-statement - Tableau - 返回具有 MAX 值的维度