[英]Azure API Management policy: validate request body against json schema
[英]Azure API management choose policy for restricting particular group
我试图限制一个组访问一个操作。 但有一些错误:
一个或多个字段包含不正确的值:第 15 行第 6 列元素“选择”中的错误:无法将 lambda 表达式转换为类型“IGroup”,因为它不是委托类型
请找到下面的代码
<policies>
<inbound>
<choose>
<when condition="@(context.User.Groups.Contains(g => g.name == "audit"))">
<return-response>
<set-status code="403" reason="Unauthorized" />
<set-body>Users in group audit do not have access to this method. </set-body>
</return-response>
</when>
</choose>
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
看起来当前政策存在两个不同的问题。
Name
,而不是name
(请参阅IGroup )Contains()
,而Any()
有效 context.User.Groups
属性的类型为IEnumerable<IGroup>
。 API 管理策略表达式仅允许/支持选定的类型和成员列表。
受支持的System.Linq.Enumerable
class 中的Contains()
实现没有接受Func
的重载。 它只有Contains<TSource>(IEnumerable<TSource>, TSource)
和Contains<TSource>(IEnumerable<TSource>, TSource, IEqualityComparer<TSource>)
。
Any()
实现确实有一个接受Func
的重载( Any(IEnumerable, Func<TSource,Boolean>) )。
所以你可能需要使用Any()
,像这样检查Name
属性:
<when condition="@(context.User.Groups.Any(g => g.Name == "audit"))">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.