API Management-beleidsexpressies
VAN TOEPASSING OP: Alle API Management-lagen
In dit artikel worden de syntaxis van beleidsexpressies in C# 7 besproken. Elke expressie heeft toegang tot:
- De impliciet opgegeven contextvariabele .
- Een toegestane subset van .NET Framework-typen.
Syntaxis
- Expressies met één instructie:
- Ingesloten in
@(expression)
, waarexpression
een goed gevormde C#-expressie-instructie is.
- Ingesloten in
- Expressies met meerdere instructies:
- Ingesloten in
@{expression}
. - Alle codepaden binnen expressies met meerdere instructies moeten eindigen met een
return
instructie.
- Ingesloten in
Voorbeelden
@(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;
}
Gebruik
Tenzij de beleidsreferentie anders aangeeft, kunnen expressies worden gebruikt als kenmerkwaarden of tekstwaarden in een API Management-beleid.
Belangrijk
Wanneer het beleid is gedefinieerd, hebben beleidsexpressies slechts beperkte verificatie. Expressies worden tijdens runtime uitgevoerd door de gateway. Uitzonderingen die worden gegenereerd door beleidsexpressies, resulteren in een runtimefout.
.NET Framework-typen die zijn toegestaan in beleidsexpressies
De volgende tabel bevat de .NET Framework-typen en leden die zijn toegestaan in beleidsexpressies.
Type | Ondersteunde leden |
---|---|
Newtonsoft.Json.Formatting |
Alle |
Newtonsoft.Json.JsonConvert |
SerializeObject , DeserializeObject |
Newtonsoft.Json.Linq.Extensions |
Alle |
Newtonsoft.Json.Linq.JArray |
Alle |
Newtonsoft.Json.Linq.JConstructor |
Alle |
Newtonsoft.Json.Linq.JContainer |
Alle |
Newtonsoft.Json.Linq.JObject |
Alle |
Newtonsoft.Json.Linq.JProperty |
Alle |
Newtonsoft.Json.Linq.JRaw |
Alle |
Newtonsoft.Json.Linq.JToken |
Alle |
Newtonsoft.Json.Linq.JTokenType |
Alle |
Newtonsoft.Json.Linq.JValue |
Alle |
System.Array |
Alle |
System.BitConverter |
Alle |
System.Boolean |
Alle |
System.Byte |
Alle |
System.Char |
Alle |
System.Collections.Generic.Dictionary<TKey, TValue> |
Alle |
System.Collections.Generic.HashSet<T> |
Alle |
System.Collections.Generic.ICollection<T> |
Alle |
System.Collections.Generic.IDictionary<TKey, TValue> |
Alle |
System.Collections.Generic.IEnumerable<T> |
Alle |
System.Collections.Generic.IEnumerator<T> |
Alle |
System.Collections.Generic.IList<T> |
Alle |
System.Collections.Generic.IReadOnlyCollection<T> |
Alle |
System.Collections.Generic.IReadOnlyDictionary<TKey, TValue> |
Alle |
System.Collections.Generic.ISet<T> |
Alle |
System.Collections.Generic.KeyValuePair<TKey, TValue> |
Alle |
System.Collections.Generic.List<T> |
Alle |
System.Collections.Generic.Queue<T> |
Alle |
System.Collections.Generic.Stack<T> |
Alle |
System.Convert |
Alle |
System.DateTime |
(Constructor), Add , , AddHours AddDays , AddMilliseconds , , AddMinutes , AddMonths , AddSeconds , , , Day TimeOfDay Minute Millisecond MaxValue IsLeapYear MinValue IsDaylightSavingTime Hour Month Subtract Second Ticks Parse Today ToString AddYears DayOfWeek UtcNow Date DayOfYear DaysInMonth Now AddTicks Year |
System.DateTimeKind |
Utc |
System.DateTimeOffset |
Alle |
System.Decimal |
Alle |
System.Double |
Alle |
System.Enum |
Parse , , TryParse ToString |
System.Exception |
Alle |
System.Guid |
Alle |
System.Int16 |
Alle |
System.Int32 |
Alle |
System.Int64 |
Alle |
System.IO.StringReader |
Alle |
System.IO.StringWriter |
Alle |
System.Linq.Enumerable |
Alle |
System.Math |
Alle |
System.MidpointRounding |
Alle |
System.Net.IPAddress |
AddressFamily , , Equals GetAddressBytes , IsLoopback , , Parse , , TryParse ToString |
System.Net.WebUtility |
Alle |
System.Nullable |
Alle |
System.Random |
Alle |
System.SByte |
Alle |
System.Security.Cryptography.AsymmetricAlgorithm |
Alle |
System.Security.Cryptography.CipherMode |
Alle |
System.Security.Cryptography.HashAlgorithm |
Alle |
System.Security.Cryptography.HashAlgorithmName |
Alle |
System.Security.Cryptography.HMAC |
Alle |
System.Security.Cryptography.HMACMD5 |
Alle |
System.Security.Cryptography.HMACSHA1 |
Alle |
System.Security.Cryptography.HMACSHA256 |
Alle |
System.Security.Cryptography.HMACSHA384 |
Alle |
System.Security.Cryptography.HMACSHA512 |
Alle |
System.Security.Cryptography.KeyedHashAlgorithm |
Alle |
System.Security.Cryptography.MD5 |
Alle |
System.Security.Cryptography.Oid |
Alle |
System.Security.Cryptography.PaddingMode |
Alle |
System.Security.Cryptography.RNGCryptoServiceProvider |
Alle |
System.Security.Cryptography.RSA |
Alle |
System.Security.Cryptography.RSAEncryptionPadding |
Alle |
System.Security.Cryptography.RSASignaturePadding |
Alle |
System.Security.Cryptography.SHA1 |
Alle |
System.Security.Cryptography.SHA1Managed |
Alle |
System.Security.Cryptography.SHA256 |
Alle |
System.Security.Cryptography.SHA256Managed |
Alle |
System.Security.Cryptography.SHA384 |
Alle |
System.Security.Cryptography.SHA384Managed |
Alle |
System.Security.Cryptography.SHA512 |
Alle |
System.Security.Cryptography.SHA512Managed |
Alle |
System.Security.Cryptography.SymmetricAlgorithm |
Alle |
System.Security.Cryptography.X509Certificates.PublicKey |
Alle |
System.Security.Cryptography.X509Certificates.RSACertificateExtensions |
Alle |
System.Security.Cryptography.X509Certificates.X500DistinguishedName |
Name |
System.Security.Cryptography.X509Certificates.X509Certificate |
Alle |
System.Security.Cryptography.X509Certificates.X509Certificate2 |
Alle |
System.Security.Cryptography.X509Certificates.X509ContentType |
Alle |
System.Security.Cryptography.X509Certificates.X509NameType |
Alle |
System.Single |
Alle |
System.String |
Alle |
System.StringComparer |
Alle |
System.StringComparison |
Alle |
System.StringSplitOptions |
Alle |
System.Text.Encoding |
Alle |
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 |
(Constructor), IsMatch , Match , Matches , , Replace , Unescape Split |
System.Text.RegularExpressions.RegexOptions |
Alle |
System.Text.StringBuilder |
Alle |
System.TimeSpan |
Alle |
System.TimeZone |
Alle |
System.TimeZoneInfo.AdjustmentRule |
Alle |
System.TimeZoneInfo.TransitionTime |
Alle |
System.TimeZoneInfo |
Alle |
System.Tuple |
Alle |
System.UInt16 |
Alle |
System.UInt32 |
Alle |
System.UInt64 |
Alle |
System.Uri |
Alle |
System.UriPartial |
Alle |
System.Xml.Linq.Extensions |
Alle |
System.Xml.Linq.XAttribute |
Alle |
System.Xml.Linq.XCData |
Alle |
System.Xml.Linq.XComment |
Alle |
System.Xml.Linq.XContainer |
Alle |
System.Xml.Linq.XDeclaration |
Alle |
System.Xml.Linq.XDocument |
Alles, behalve Load |
System.Xml.Linq.XDocumentType |
Alle |
System.Xml.Linq.XElement |
Alle |
System.Xml.Linq.XName |
Alle |
System.Xml.Linq.XNamespace |
Alle |
System.Xml.Linq.XNode |
Alle |
System.Xml.Linq.XNodeDocumentOrderComparer |
Alle |
System.Xml.Linq.XNodeEqualityComparer |
Alle |
System.Xml.Linq.XObject |
Alle |
System.Xml.Linq.XProcessingInstruction |
Alle |
System.Xml.Linq.XText |
Alle |
System.Xml.XmlNodeType |
Alle |
Contextvariabele
De context
variabele is impliciet beschikbaar in elke beleidsexpressie. De leden:
- Geef informatie op die relevant is voor de API-aanvraag en -reactie en gerelateerde eigenschappen.
- Zijn allemaal alleen-lezen.
Contextvariabele | Toegestane methoden, eigenschappen en parameterwaarden |
---|---|
context |
Api : IApi Deployment Verstreken: TimeSpan - tijdsinterval tussen de waarde van Timestamp en de huidige tijdGraphQL LastError Operation Request RequestId : Guid - unieke aanvraag-idResponse Subscription Timestamp : DateTime - tijdstip waarop de aanvraag is ontvangenTracing : bool - geeft aan of tracering is ingeschakeld of uitgeschakeld Gebruiker Variables : IReadOnlyDictionary<string, object> void Trace(message: string) Workspace |
context.Api |
Id : string IsCurrentRevision : bool Name : string Path : string Revision : string ServiceUrl : IUrl Version : string |
context.Deployment |
Gateway GatewayId : string (retourneert 'beheerd' voor beheerde gateways)Region : string ServiceId : string ServiceName : string Certificates : IReadOnlyDictionary<string, X509Certificate2> |
context.Deployment.Gateway |
Id : string (retourneert 'beheerd' voor beheerde gateways)InstanceId : string (retourneert 'beheerd' voor beheerde gateways)IsManaged : bool |
context.GraphQL |
GraphQLArguments : IGraphQLDataObject Parent : IGraphQLDataObject Voorbeelden |
context.LastError |
Source : string Reason : string Message : string Scope : string Section : string Path : string PolicyId : string Zie Foutafhandeling voor meer informatie over. context.LastError |
context.Operation |
Id : string Method : string Name : string UrlTemplate : string |
context.Product |
ApprovalRequired : bool Groups : IEnumerable< IGroup > Id : string Name : string State : enum ProductState {NotPublished, Published} SubscriptionsLimit : int? SubscriptionRequired : bool |
context.Request |
Body : IMessageBody of null als de aanvraag geen hoofdtekst heeft.Certificate : System.Security.Cryptography.X509Certificates.X509Certificate2 Headers : IReadOnlyDictionary<string, string[]> IpAddress : string MatchedParameters : IReadOnlyDictionary<string, string> Method : string OriginalUrl : IUrl Url : IUrl PrivateEndpointConnection : IPrivateEndpointConnection of null als de aanvraag niet afkomstig is van een privé-eindpuntverbinding. |
string context.Request.Headers.GetValueOrDefault(headerName: string, defaultValue: string) |
headerName : string defaultValue : string Retourneert waarden voor door komma's gescheiden aanvraagheaders of defaultValue als de header niet wordt gevonden. |
context.Response |
Body : IMessageBody Headers : IReadOnlyDictionary<string, string[]> StatusCode : int StatusReason : string |
string context.Response.Headers.GetValueOrDefault(headerName: string, defaultValue: string) |
headerName : string defaultValue : string Retourneert door komma's gescheiden antwoordheaderwaarden of defaultValue als de header niet wordt gevonden. |
context.Subscription |
CreatedDate : DateTime EndDate : DateTime? Id : string Key : string Name : string PrimaryKey : string SecondaryKey : string StartDate : DateTime? |
context.User |
Email : string FirstName : string Groups : IEnumerable< IGroup > Id : string Identities : IEnumerable< IUserIdentity > LastName : string Note : string RegistrationDate : DateTime |
context.Workspace |
Id : string Name : string |
IApi |
Id : string Name : string Path : string Protocols : IEnumerable<string> ServiceUrl : IUrl SubscriptionKeyParameterNames : ISubscriptionKeyParameterNames |
IGraphQLDataObject |
N.t.b. |
IGroup |
Id : string Name : string |
IMessageBody |
As<T>(bool preserveContent = false): Where T: string, byte[], JObject, JToken, JArray, XNode, XElement, XDocument - De context.Request.Body.As<T> en context.Response.Body.As<T> methoden lezen een berichttekst van een aanvraag of antwoord in het opgegeven type T . -Of- AsFormUrlEncodedContent(bool preserveContent = false) - De context.Request.Body.AsFormUrlEncodedContent() en context.Response.Body.AsFormUrlEncodedContent() methoden lezen met URL-gecodeerde formuliergegevens in een hoofdtekst van een aanvraag- of antwoordbericht en retourneren een IDictionary<string, IList<string> object. Het gedecodeerde object ondersteunt IDictionary bewerkingen en de volgende expressies: ToQueryString() , , JsonConvert.SerializeObject() ToFormUrlEncodedContent(). Standaard worden de As<T> en AsFormUrlEncodedContent() methoden gebruikt:
Om dat te voorkomen en de methode te laten werken op een kopie van de hoofdtekststroom, stelt u de preserveContent parameter true in op , zoals wordt weergegeven in voorbeelden voor het beleid voor de set-body . |
IPrivateEndpointConnection |
Name : string GroupId : string MemberName : string Zie de REST API voor meer informatie. |
IUrl |
Host : string Path : string Port : int Query : IReadOnlyDictionary<string, string[]> QueryString : string Scheme : string |
ISubscriptionKeyParameterNames |
Header : string Query : string |
string IUrl.Query.GetValueOrDefault(queryParameterName: string, defaultValue: string) |
queryParameterName : string defaultValue : string Retourneert door komma's gescheiden queryparameterwaarden of defaultValue als de parameter niet wordt gevonden. |
IUserIdentity |
Id : string Provider : string |
T context.Variables.GetValueOrDefault<T>(variableName: string, defaultValue: T) |
variableName : string defaultValue : T Retourneert een variabelewaarde die moet worden getypt T of defaultValue als de variabele niet wordt gevonden.Met deze methode wordt een uitzondering gegenereerd als het opgegeven type niet overeenkomt met het werkelijke type van de geretourneerde variabele. |
BasicAuthCredentials AsBasic(input: this string) |
input : string Als de invoerparameter een geldige headerwaarde voor de aanvraag voor http-basisverificatie bevat, retourneert de methode een object van het type BasicAuthCredentials ; anders retourneert de methode null. |
bool TryParseBasic(input: this string, result: out BasicAuthCredentials) |
input : string result : out BasicAuthCredentials Als de invoerparameter een geldige autorisatiewaarde voor HTTP Basic Authentication in de aanvraagheader bevat, retourneert true de methode en bevat de resultaatparameter een waarde van het type BasicAuthCredentials ; anders retourneert false de methode. |
BasicAuthCredentials |
Password : string UserId : string |
Jwt AsJwt(input: this string) |
input : string Als de invoerparameter een geldige JWT-tokenwaarde bevat, retourneert de methode een object van het type Jwt ; anders retourneert null de methode. |
bool TryParseJwt(input: this string, result: out Jwt) |
input : string result : out Jwt Als de invoerparameter een geldige JWT-tokenwaarde bevat, retourneert true de methode en bevat de resultaatparameter een waarde van het type Jwt ; anders retourneert false de methode. |
Jwt |
Algorithm : string Audiences : IEnumerable<string> Claims : IReadOnlyDictionary<string, string[]> ExpirationTime : DateTime? Id : string Issuer : string IssuedAt : DateTime? NotBefore : DateTime? Subject : string Type : string |
string Jwt.Claims.GetValueOrDefault(claimName: string, defaultValue: string) |
claimName : string defaultValue : string Retourneert door komma's gescheiden claimwaarden of defaultValue als de header niet wordt gevonden. |
byte[] Encrypt(input: this byte[], alg: string, key:byte[], iv:byte[]) |
input - tekst zonder opmaak die moet worden versleuteldalg - naam van een symmetrisch versleutelingsalgoritmenkey -Coderingssleuteliv - initialisatievectorRetourneert versleutelde tekst zonder opmaak. |
byte[] Encrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm) |
input - tekst zonder opmaak die moet worden versleuteldalg -CoderingsalgoritmeRetourneert versleutelde tekst zonder opmaak. |
byte[] Encrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm, key:byte[], iv:byte[]) |
input - tekst zonder opmaak die moet worden versleuteldalg -Coderingsalgoritmekey -Coderingssleuteliv - initialisatievectorRetourneert versleutelde tekst zonder opmaak. |
byte[] Decrypt(input: this byte[], alg: string, key:byte[], iv:byte[]) |
input - versleutelingstekst die moet worden ontsleuteldalg - naam van een symmetrisch versleutelingsalgoritmenkey -Coderingssleuteliv - initialisatievectorRetourneert tekst zonder opmaak. |
byte[] Decrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm) |
input - versleutelingstekst die moet worden ontsleuteldalg -CoderingsalgoritmeRetourneert tekst zonder opmaak. |
byte[] Decrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm, key:byte[], iv:byte[]) |
input - versleutelingstekst die moet worden ontsleuteldalg -Coderingsalgoritmekey -Coderingssleuteliv - initialisatievectorRetourneert tekst zonder opmaak. |
bool VerifyNoRevocation(input: this System.Security.Cryptography.X509Certificates.X509Certificate2) |
Voert een X.509-ketenvalidatie uit zonder de certificaatintrekkingsstatus te controleren.input - certificaatobjectRetourneert true als de validatie slaagt. false Als de validatie mislukt. |
Gerelateerde inhoud
Zie voor meer informatie over het werken met beleid:
- Beleid in API Management
- Zelfstudie: API's transformeren en beveiligen
- Beleidsreferentie voor een volledige lijst met beleidsinstructies en hun instellingen
- Beleidsfragmentenopslagplaats
- Beleid ontwerpen met Behulp van Microsoft Copilot in Azure
Bekijk voor meer informatie:
- Zie hoe u contextinformatie kunt opgeven voor uw back-endservice. Gebruik de queryreeksparameter instellen en STEL HTTP-headerbeleid in om deze informatie op te geven.
- Lees hoe u het JWT-beleid valideren gebruikt om de toegang tot bewerkingen vooraf te autoriseren op basis van tokenclaims.
- Bekijk hoe u een API Inspector-trace gebruikt om te detecteren hoe beleidsregels worden geëvalueerd en de resultaten van deze evaluaties.
- Zie hoe u expressies gebruikt met de get from cache en Store om beleid voor API Management-reacties te configureren. Stel een duur in die overeenkomt met de reactiecache van de back-endservice, zoals is opgegeven door de instructie van
Cache-Control
de ondersteunde service. - Zie hoe u inhoudsfilters uitvoert. Verwijder gegevenselementen uit het antwoord dat is ontvangen van de back-end met behulp van de besturingsstroom en stel hoofdtekstbeleidsregels in.
- Zie de GitHub-opslagplaats api-management-samples/policies om de beleidsinstructies te downloaden.