Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
APLICA-SE A: Todas as camadas de gerenciamento de API
Este artigo discute a sintaxe de expressões de política em C# 7. Cada expressão tem acesso a:
- A variável de contexto implicitamente fornecida.
- Um subconjunto permitido de tipos do .NET Framework.
Sintaxe
-
Expressões de declaração única:
- Incluído em
@(expression), ondeexpressionestá uma instrução de expressão C# bem formada.
- Incluído em
-
Expressões com várias instruções:
- Incluído em
@{expression}. - Todos os caminhos de código dentro de expressões de várias instruções devem terminar com uma
returninstrução.
- Incluído em
Exemplos
@(true)
@((1+1).ToString())
@("Hi There".Length)
@(Regex.Match(context.Response.Headers.GetValueOrDefault("Cache-Control",""), @"max-age=(?<maxAge>\d+)").Groups["maxAge"]?.Value)
@(context.Variables.ContainsKey("maxAge") ? int.Parse((string)context.Variables["maxAge"]) : 3600)
@{
string[] value;
if (context.Request.Headers.TryGetValue("Authorization", out value))
{
if(value != null && value.Length > 0)
{
return Encoding.UTF8.GetString(Convert.FromBase64String(value[0]));
}
}
return null;
}
Utilização
A menos que a referência de política especifique o contrário, as expressões podem ser usadas como valores de atributo ou valores de texto em qualquer política de Gerenciamento de API.
Importante
Quando a política é definida, as expressões têm apenas uma verificação limitada. As expressões são executadas pelo gateway em tempo de execução. Quaisquer exceções geradas por expressões de políticas resultam num erro de runtime.
Tipos do .NET Framework permitidos em expressões de política
A tabela a seguir lista os tipos e membros do .NET Framework permitidos em expressões de política.
| Tipo | Membros suportados |
|---|---|
Newtonsoft.Json.Formatting |
Todos |
Newtonsoft.Json.JsonConvert |
SerializeObject, DeserializeObject |
Newtonsoft.Json.Linq.Extensions |
Todos |
Newtonsoft.Json.Linq.JArray |
Todos |
Newtonsoft.Json.Linq.JConstructor |
Todos |
Newtonsoft.Json.Linq.JContainer |
Todos |
Newtonsoft.Json.Linq.JObject |
Todos |
Newtonsoft.Json.Linq.JProperty |
Todos |
Newtonsoft.Json.Linq.JRaw |
Todos |
Newtonsoft.Json.Linq.JToken |
Todos |
Newtonsoft.Json.Linq.JTokenType |
Todos |
Newtonsoft.Json.Linq.JValue |
Todos |
System.Array |
Todos |
System.BitConverter |
Todos |
System.Boolean |
Todos |
System.Byte |
Todos |
System.Char |
Todos |
System.Collections.Generic.Dictionary<TKey, TValue> |
Todos |
System.Collections.Generic.HashSet<T> |
Todos |
System.Collections.Generic.ICollection<T> |
Todos |
System.Collections.Generic.IDictionary<TKey, TValue> |
Todos |
System.Collections.Generic.IEnumerable<T> |
Todos |
System.Collections.Generic.IEnumerator<T> |
Todos |
System.Collections.Generic.IList<T> |
Todos |
System.Collections.Generic.IReadOnlyCollection<T> |
Todos |
System.Collections.Generic.IReadOnlyDictionary<TKey, TValue> |
Todos |
System.Collections.Generic.ISet<T> |
Todos |
System.Collections.Generic.KeyValuePair<TKey, TValue> |
Todos |
System.Collections.Generic.List<T> |
Todos |
System.Collections.Generic.Queue<T> |
Todos |
System.Collections.Generic.Stack<T> |
Todos |
System.Convert |
Todos |
System.DateTime |
(Construtor), , , , , AddAddDaysAddHoursAddMillisecondsAddMinutesAddMonthsAddSecondsAddTicksAddYearsDateDayDayOfWeekDayOfYearDaysInMonthHourIsDaylightSavingTimeIsLeapYearMaxValueMillisecondMinuteMinValueMonthNowParseSecondSubtractTicksTimeOfDayTodayToStringUtcNowYear |
System.DateTimeKind |
Utc |
System.DateTimeOffset |
Todos |
System.Decimal |
Todos |
System.Double |
Todos |
System.Enum |
Parse, TryParse, ToString |
System.Exception |
Todos |
System.Guid |
Todos |
System.Int16 |
Todos |
System.Int32 |
Todos |
System.Int64 |
Todos |
System.IO.StringReader |
Todos |
System.IO.StringWriter |
Todos |
System.Linq.Enumerable |
Todos |
System.Math |
Todos |
System.MidpointRounding |
Todos |
System.Net.IPAddress |
AddressFamily, Equals, GetAddressBytes, IsLoopback, Parse, TryParse, ToString |
System.Net.WebUtility |
Todos |
System.Nullable |
Todos |
System.Random |
Todos |
System.SByte |
Todos |
System.Security.Cryptography.AsymmetricAlgorithm |
Todos |
System.Security.Cryptography.CipherMode |
Todos |
System.Security.Cryptography.HashAlgorithm |
Todos |
System.Security.Cryptography.HashAlgorithmName |
Todos |
System.Security.Cryptography.HMAC |
Todos |
System.Security.Cryptography.HMACMD5 |
Todos |
System.Security.Cryptography.HMACSHA1 |
Todos |
System.Security.Cryptography.HMACSHA256 |
Todos |
System.Security.Cryptography.HMACSHA384 |
Todos |
System.Security.Cryptography.HMACSHA512 |
Todos |
System.Security.Cryptography.KeyedHashAlgorithm |
Todos |
System.Security.Cryptography.MD5 |
Todos |
System.Security.Cryptography.Oid |
Todos |
System.Security.Cryptography.PaddingMode |
Todos |
System.Security.Cryptography.RNGCryptoServiceProvider |
Todos |
System.Security.Cryptography.RSA |
Todos |
System.Security.Cryptography.RSAEncryptionPadding |
Todos |
System.Security.Cryptography.RSASignaturePadding |
Todos |
System.Security.Cryptography.SHA1 |
Todos |
System.Security.Cryptography.SHA1Managed |
Todos |
System.Security.Cryptography.SHA256 |
Todos |
System.Security.Cryptography.SHA256Managed |
Todos |
System.Security.Cryptography.SHA384 |
Todos |
System.Security.Cryptography.SHA384Managed |
Todos |
System.Security.Cryptography.SHA512 |
Todos |
System.Security.Cryptography.SHA512Managed |
Todos |
System.Security.Cryptography.SymmetricAlgorithm |
Todos, exceto parâmetros Create() |
System.Security.Cryptography.X509Certificates.PublicKey |
Todos |
System.Security.Cryptography.X509Certificates.RSACertificateExtensions |
Todos |
System.Security.Cryptography.X509Certificates.X500DistinguishedName |
Name |
System.Security.Cryptography.X509Certificates.X509Certificate |
Todos |
System.Security.Cryptography.X509Certificates.X509Certificate2 |
Todos |
System.Security.Cryptography.X509Certificates.X509ContentType |
Todos |
System.Security.Cryptography.X509Certificates.X509NameType |
Todos |
System.Single |
Todos |
System.String |
Todos |
System.StringComparer |
Todos |
System.StringComparison |
Todos |
System.StringSplitOptions |
Todos |
System.Text.Encoding |
Todos |
System.Text.RegularExpressions.Capture |
Index, Length, Value |
System.Text.RegularExpressions.CaptureCollection |
Count, Item |
System.Text.RegularExpressions.Group |
Captures, Success |
System.Text.RegularExpressions.GroupCollection |
Count, Item |
System.Text.RegularExpressions.Match |
Empty, Groups, Result |
System.Text.RegularExpressions.Regex |
(Construtor), IsMatch, Match, Matches, Replace, Unescape, , Split |
System.Text.RegularExpressions.RegexOptions |
Todos |
System.Text.StringBuilder |
Todos |
System.TimeSpan |
Todos |
System.TimeZone |
Todos |
System.TimeZoneInfo.AdjustmentRule |
Todos |
System.TimeZoneInfo.TransitionTime |
Todos |
System.TimeZoneInfo |
Todos |
System.Tuple |
Todos |
System.UInt16 |
Todos |
System.UInt32 |
Todos |
System.UInt64 |
Todos |
System.Uri |
Todos |
System.UriPartial |
Todos |
System.Xml.Linq.Extensions |
Todos |
System.Xml.Linq.XAttribute |
Todos |
System.Xml.Linq.XCData |
Todos |
System.Xml.Linq.XComment |
Todos |
System.Xml.Linq.XContainer |
Todos |
System.Xml.Linq.XDeclaration |
Todos |
System.Xml.Linq.XDocument |
Todos, exceto Load |
System.Xml.Linq.XDocumentType |
Todos |
System.Xml.Linq.XElement |
Todos |
System.Xml.Linq.XName |
Todos |
System.Xml.Linq.XNamespace |
Todos |
System.Xml.Linq.XNode |
Todos |
System.Xml.Linq.XNodeDocumentOrderComparer |
Todos |
System.Xml.Linq.XNodeEqualityComparer |
Todos |
System.Xml.Linq.XObject |
Todos |
System.Xml.Linq.XProcessingInstruction |
Todos |
System.Xml.Linq.XText |
Todos |
System.Xml.XmlNodeType |
Todos |
Variável de contexto
A context variável está implicitamente disponível em todas as expressões políticas. Os seus membros:
- Forneça informações relevantes para a solicitação e resposta da API e propriedades relacionadas.
- São todos somente leitura.
| Variável de contexto | Métodos, propriedades e valores de parâmetros permitidos |
|---|---|
context |
Api: IApiDeploymentDecorrido: TimeSpan - intervalo de tempo entre o valor de Timestamp e o tempo atualGraphQLLastErrorOperationRequestRequestId: Guid - identificador único do pedidoResponseSubscriptionTimestamp: DateTime - momento em que o pedido foi recebidoTracing: bool - indica se o rastreio está ativado ou desativado Utilizador Variables: IReadOnlyDictionary<string, object>void Trace(message: string) Workspace |
context.Api |
Id: stringIsCurrentRevision: boolName: stringPath: stringRevision: stringServiceUrl: IUrlVersion: string |
context.Deployment |
GatewayGatewayId: string (retorna 'gerenciado' para gateways gerenciados)Region: stringServiceId: stringServiceName: stringSustainabilityInfoCertificates: IReadOnlyDictionary<string, X509Certificate2> |
context.Deployment.Gateway |
Id: string (retorna 'gerenciado' para gateways gerenciados)InstanceId: string (retorna 'gerenciado' para gateways gerenciados)IsManaged: bool |
context.Deployment.SustainabilityInfo |
CurrentCarbonIntensity: Categoria de Intensidade do Carbono Enum |
context.GraphQL |
GraphQLArguments: IGraphQLDataObjectParent: IGraphQLDataObjectExemplos |
context.LastError |
Source: stringReason: stringMessage: stringScope: stringSection: stringPath: stringPolicyId: stringPara obter mais informações sobre context.LastErroro , consulte Tratamento de erros. |
context.Operation |
Id: stringMethod: stringName: stringUrlTemplate: string |
context.Product |
ApprovalRequired: boolGroups: IEnumerable<IGroup>Id: stringName: stringState: enum ProductState {NotPublished, Published}SubscriptionsLimit: int?SubscriptionRequired: bool |
context.Request |
Body: IMessageBody ou null se o pedido não tiver um corpo.Certificate: System.Security.Cryptography.X509Certificates.X509Certificate2Headers: IReadOnlyDictionary<string, string[]>IpAddress: stringMatchedParameters: IReadOnlyDictionary<string, string>Method: stringOriginalUrl: IUrlUrl: IUrlPrivateEndpointConnection: IPrivateEndpointConnection ou null se a solicitação não vier de uma conexão de ponto de extremidade privada. |
string context.Request.Headers.GetValueOrDefault(headerName: string, defaultValue: string) |
headerName: stringdefaultValue: stringRetorna valores de cabeçalho de solicitação separados por vírgulas ou defaultValue se o cabeçalho não for encontrado. |
context.Response |
Body: IMessageBodyHeaders: IReadOnlyDictionary<string, string[]>StatusCode: intStatusReason: string |
string context.Response.Headers.GetValueOrDefault(headerName: string, defaultValue: string) |
headerName: stringdefaultValue: stringRetorna valores de cabeçalho de resposta separados por vírgulas ou defaultValue se o cabeçalho não for encontrado. |
context.Subscription |
CreatedDate: DateTimeEndDate: DateTime?Id: stringKey: stringName: stringPrimaryKey: stringSecondaryKey: stringStartDate: DateTime? |
context.User |
Email: stringFirstName: stringGroups: IEnumerable<IGroup>Id: stringIdentities: IEnumerable<IUserIdentity>LastName: stringNote: stringRegistrationDate: DateTime |
context.Workspace |
Id: stringName: string |
IApi |
Id: stringName: stringPath: stringProtocols: IEnumerable<string>ServiceUrl: IUrlSubscriptionKeyParameterNames: ISubscriptionKeyParameterNames |
IGraphQLDataObject |
A determinar |
IGroup |
Id: stringName: string |
IMessageBody |
As<T>(bool preserveContent = false): Where T: string, byte[], JObject, JToken, JArray, XNode, XElement, XDocument - Os context.Request.Body.As<T> métodos e context.Response.Body.As<T> lêem um corpo de mensagem de solicitação ou resposta no tipo Tespecificado. - Ou - AsFormUrlEncodedContent(bool preserveContent = false) - Os context.Request.Body.AsFormUrlEncodedContent() métodos e context.Response.Body.AsFormUrlEncodedContent() lêem dados de formulário codificados por URL em um corpo de mensagem de solicitação ou resposta e retornam um IDictionary<string, IList<string> objeto. O objeto decodificado suporta IDictionary operações e as seguintes expressões: ToQueryString(), JsonConvert.SerializeObject(), ToFormUrlEncodedContent(). Por padrão, os As<T> métodos e AsFormUrlEncodedContent() :
Para evitar isso e fazer com que o método opere em uma cópia do fluxo de corpo, defina o preserveContent parâmetro como true, como mostrado em exemplos para a política set-body . |
IPrivateEndpointConnection |
Name: stringGroupId: stringMemberName: stringPara obter mais informações, consulte a API REST. |
IUrl |
Host: stringPath: stringPort: intQuery: IReadOnlyDictionary<string, string[]>QueryString: stringScheme: string |
ISubscriptionKeyParameterNames |
Header: stringQuery: string |
string IUrl.Query.GetValueOrDefault(queryParameterName: string, defaultValue: string) |
queryParameterName: stringdefaultValue: stringRetorna valores de parâmetros de consulta separados por vírgulas ou defaultValue se o parâmetro não for encontrado. |
IUserIdentity |
Id: stringProvider: string |
T context.Variables.GetValueOrDefault<T>(variableName: string, defaultValue: T) |
variableName: stringdefaultValue: TRetorna o valor da variável convertido para digitar T ou defaultValue se a variável não for encontrada.Esse método lança uma exceção se o tipo especificado não corresponder ao tipo real da variável retornada. |
BasicAuthCredentials AsBasic(input: this string) |
input: stringSe o parâmetro de entrada contiver um valor de cabeçalho de solicitação de autorização HTTP Basic Authentication válido, o método retornará um objeto do tipo BasicAuthCredentials; caso contrário, o método retornará null. |
bool TryParseBasic(input: this string, result: out BasicAuthCredentials) |
input: stringresult: out BasicAuthCredentialsSe o parâmetro de entrada contiver um valor de autorização HTTP Basic Authentication válido no cabeçalho da solicitação, o método retornará true e o parâmetro result conterá um valor do tipo BasicAuthCredentials, caso contrário, o método retornará false. |
BasicAuthCredentials |
Password: stringUserId: string |
Jwt AsJwt(input: this string) |
input: stringSe o parâmetro input contiver um valor JWT válido, o método retornará um objeto do tipo Jwt, caso contrário, o método retornará null. |
bool TryParseJwt(input: this string, result: out Jwt) |
input: stringresult: out JwtSe o parâmetro input contiver um valor JWT válido, o método retornará true e o parâmetro result conterá um valor do tipo Jwt, caso contrário, o método retornará false. |
Jwt |
Algorithm: stringAudiences: IEnumerable<string>Claims: IReadOnlyDictionary<string, string[]>ExpirationTime: DateTime?Id: stringIssuer: stringIssuedAt: DateTime?NotBefore: DateTime?Subject: stringType: string |
string Jwt.Claims.GetValueOrDefault(claimName: string, defaultValue: string) |
claimName: stringdefaultValue: stringRetorna valores de declaração separados por vírgulas ou defaultValue se o cabeçalho não for encontrado. |
byte[] Encrypt(input: this byte[], alg: string, key:byte[], iv:byte[]) |
input - texto simples a encriptaralg - nome de um algoritmo de encriptação simétricakey - chave de encriptaçãoiv - vetor de inicializaçãoRetorna texto sem formatação criptografado. |
byte[] Encrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm) |
input - texto simples a encriptaralg - algoritmo de encriptaçãoRetorna texto sem formatação criptografado. |
byte[] Encrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm, key:byte[], iv:byte[]) |
input - texto simples a encriptaralg - algoritmo de encriptaçãokey - chave de encriptaçãoiv - vetor de inicializaçãoRetorna texto sem formatação criptografado. |
byte[] Decrypt(input: this byte[], alg: string, key:byte[], iv:byte[]) |
input - texto cypher a ser desencriptadoalg - nome de um algoritmo de encriptação simétricakey - chave de encriptaçãoiv - vetor de inicializaçãoDevolve texto simples. |
byte[] Decrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm) |
input - texto cypher a ser desencriptadoalg - algoritmo de encriptaçãoDevolve texto simples. |
byte[] Decrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm, key:byte[], iv:byte[]) |
input - texto cypher a ser desencriptadoalg - algoritmo de encriptaçãokey - chave de encriptaçãoiv - vetor de inicializaçãoDevolve texto simples. |
bool VerifyNoRevocation(input: this System.Security.Cryptography.X509Certificates.X509Certificate2) |
Executa uma validação de cadeia X.509 sem verificar o status de revogação do certificado.input - objeto do certificadoRetorna true se a validação for bem-sucedida, false se a validação falhar. |
Conteúdos relacionados
Para obter mais informações sobre como trabalhar com políticas, consulte:
- Tutorial: Transforme e proteja sua API
- Referência de política para uma lista completa de declarações de política e suas configurações
- Expressões de política
- Definir ou editar políticas
- Reutilizar configurações de políticas
- Recompra de trechos de política
- Política de recompra de parques infantis
- Kit de ferramentas de política de Gerenciamento de API do Azure
- Obtenha assistência do Copilot para criar, explicar e resolver problemas com políticas
Para mais informações:
- Veja como fornecer informações de contexto para seu serviço de back-end. Use o parâmetro set query string e set HTTP header policies para fornecer essas informações.
- Veja como usar a política Validar JWT para pré-autorizar o acesso a operações com base em declarações de token.
- Veja como usar o rastreamento de API para detetar como as políticas são avaliadas e os resultados dessas avaliações.
- Veja como usar expressões com as políticas Obter do cache e Armazenar para cache para configurar o cache de resposta do Gerenciamento de API. Defina uma duração que corresponda ao cache de resposta do serviço de back-end, conforme especificado pela diretiva do
Cache-Controlserviço com backup. - Veja como executar a filtragem de conteúdo. Remova elementos de dados da resposta recebida do back-end usando as políticas Fluxo de controle e Definir corpo .
- Para baixar as instruções de política, consulte o repositório do GitHub api-management-samples/policies .