C# 尝试从REST API列出筛选的订阅
我正在尝试显示来自Azure API管理的REST API的订阅。根据,我应该能够在查询字符串中指定一个C# 尝试从REST API列出筛选的订阅,c#,azure,azure-api-management,C#,Azure,Azure Api Management,我正在尝试显示来自Azure API管理的REST API的订阅。根据,我应该能够在查询字符串中指定一个$filter参数,但是我不清楚过滤器字符串应该采用什么格式,而且示例很简单 这是我的密码: using (var client = new HttpClient()) { client.BaseAddress = new Uri(baseUrl); client.DefaultRequestHeaders.Add("Authorization", _azureApiManag
$filter
参数,但是我不清楚过滤器字符串应该采用什么格式,而且示例很简单
这是我的密码:
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(baseUrl);
client.DefaultRequestHeaders.Add("Authorization", _azureApiManagementFunctions.CreateSharedAccessToken());
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/json"));
string filter = "ownerId eq " + "/users/" + user.Id; //this is likely where the issue is
response = await client.GetAsync("/subscriptions" + "?api-version=" + apiVersion + "&$filter=" + filter);
var contents = await response.Content.ReadAsStringAsync();
var contentsJson = JsonConvert.DeserializeObject<ApimSubscription>(contents);
};
使用(var-client=new-HttpClient())
{
client.BaseAddress=新Uri(baseUrl);
client.DefaultRequestHeaders.Add(“授权”,_azureapimagementfunctions.CreateSharedAccessToken());
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“text/json”);
string filter=“ownerId eq”+“/users/”+user.Id;//这可能就是问题所在
response=wait client.GetAsync(“/subscriptions”+”?api version=“+apiVersion+”&$filter=“+filter”);
var contents=wait response.Content.ReadAsStringAsync();
var contentsJson=JsonConvert.DeserializeObject(内容);
};
我得到一个错误:
“{\”error\”:{\“code\”:\“ValidationError\”,“message\”:\“指定的筛选器子句无效:'ownerId eq/users/[removed]'。\”,“details\”:null}“
我还尝试将过滤器设置为“ownerideq”+user.userId
因此,我的问题是,以前是否有人使用过这样的筛选参数?您对如何为单个用户获取订阅有何建议?Summary
$filter=contains(属性/ownerId,“用户/1”)
- 基于检查Azure门户UI请求
- 在步骤18中是经过修改的代码
- 如果您以前创建过服务,请跳到步骤3
- 然后打开:
- 等待15米到60米
- 然后在下一步之前转到网络点击
- 否则请求将不会被记录
- 文本将是这样的
- 我曾经
- 文本将是这样的
$filter=
(
(
contains(properties/displayName, 'jason-shave-msft') or
contains(properties/stateComment, 'jason-shave-msft') or
contains(properties/userId, 'jason-shave-msft') or
contains(properties/productId, 'jason-shave-msft')
)
)
and
(
properties/productId eq 'starter'
)
/订阅/XXXXXXXXXXXXXX/
资源组/堆栈溢出54171031 AMS资源组/
提供程序/Microsoft.API管理/
服务/堆栈溢出54171031 AMS名称/
订阅费?
api版本=2018-01-01&
$filter=(
(包含(属性/显示名称“jason shave msft”)或
包含(属性/状态注释“jason shave msft”)或
包含(属性/用户ID,“jason shave msft”)或
包含(属性/产品ID“jason shave msft”))
)和(properties/productId eq'starter')&$top=10
步骤10:格式化$filter参数
- 文本将是这样的
$filter= ( ( contains(properties/displayName, 'jason-shave-msft') or contains(properties/stateComment, 'jason-shave-msft') or contains(properties/userId, 'jason-shave-msft') or contains(properties/productId, 'jason-shave-msft') ) ) and ( properties/productId eq 'starter' )
- 输入你的azure电子邮件
- 看到结果了吗
- 将输出 $filter=contains(属性/ownerId,“用户/1”)
- 试试这里
var subscriptionId=“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”;
var resourceGroupName=“stackoverflow000000 AMS ResourceGroup”;
var serviceName=“stackoverflow000000 AMS名称”;
var baseUrl=”https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.apimagement/service/{serviceName}”
使用(var client=new HttpClient())
{
client.BaseAddress=新Uri(baseUrl);
client.DefaultRequestHeaders.Add(“授权”,_azureapimagementfunctions.CreateSharedAccessToken());
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“text/json”);
var filter=$“包含(properties/ownerId,'users/{user.Id}')”;
response=wait client.GetAsync($“/subscriptions?api version={apiVersion}&$filter={filter}”);
var contents=wait response.Content.ReadAsStringAsync();
var contentsJson=JsonConvert.DeserializeObject(内容);
};
试试这个,
string filter=“ownerId eq”+user.Id;
01.我可以知道你是如何获得用户ID的吗。
02.能否调试并发送失败的完整URL?检查您使用的API版本。此处的文档指定了API版本2018-06-01-preview的订阅合同(位于页面顶部)。实际的API规范位于此处: 最后一个稳定版本-2018-01-01-指定订阅合同具有“userId”属性,而不是“ownerId”。后者已在预览版本中替换“userId”,并将在下一个稳定版本中保留其位置
因此,如果您使用的版本低于2018-06-01-preview,请使用$filter=userId eq'/users/XXX'按用户筛选订阅。或者对于这种特殊情况,您也可以使用不同的端点-/users/XXX/subscriptions不确定您的问题中是否有输入错误,但您在API r中编写了
fitler
而不是filter
esource string…谢谢@oerkelens.Updated。现在收到一个筛选器错误。根据示例,我想知道/users/
在您的筛选器中做了什么。如果您
var subscriptionId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
var resourceGroupName = "stackoverflow000000-AMS-ResourceGroup";
var serviceName = "stackoverflow000000-AMS-Name";
var baseUrl = "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}"
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(baseUrl);
client.DefaultRequestHeaders.Add("Authorization", _azureApiManagementFunctions.CreateSharedAccessToken());
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/json"));
var filter = $"contains(properties/ownerId, 'users/{user.Id}')";
response = await client.GetAsync($"/subscriptions?api-version={apiVersion}&$filter={filter}");
var contents = await response.Content.ReadAsStringAsync();
var contentsJson = JsonConvert.DeserializeObject<ApimSubscription>(contents);
};