API Management beleidsexpressies
In dit artikel wordt de syntaxis van beleidsexpressies in C# 7 besproken. Elke expressie heeft toegang tot:
- De impliciet opgegeven contextvariabele .
- Een toegestane subset van .NET Framework typen.
Syntax
- Expressies met één instructie:
- Ingesloten in
@(expression)
, waarbijexpression
een goed opgemaakte C#-expressie-instructie is.
- Ingesloten in
- Expressies met meerdere instructies:
- Ingesloten in
@{expression}
. - Alle codepaden binnen expressies met meerdere instructies moeten eindigen op 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 in de beleidsreferentie iets anders wordt aangegeven, kunnen expressies worden gebruikt als kenmerkwaarden of tekstwaarden in elk 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 |
Alles |
Newtonsoft.Json.JsonConvert |
SerializeObject , DeserializeObject |
Newtonsoft.Json.Linq.Extensions |
Alles |
Newtonsoft.Json.Linq.JArray |
Alles |
Newtonsoft.Json.Linq.JConstructor |
Alles |
Newtonsoft.Json.Linq.JContainer |
Alles |
Newtonsoft.Json.Linq.JObject |
Alles |
Newtonsoft.Json.Linq.JProperty |
Alles |
Newtonsoft.Json.Linq.JRaw |
Alles |
Newtonsoft.Json.Linq.JToken |
Alles |
Newtonsoft.Json.Linq.JTokenType |
Alles |
Newtonsoft.Json.Linq.JValue |
Alles |
System.Array |
Alles |
System.BitConverter |
Alles |
System.Boolean |
Alles |
System.Byte |
Alles |
System.Char |
Alles |
System.Collections.Generic.Dictionary<TKey, TValue> |
Alles |
System.Collections.Generic.HashSet<T> |
Alles |
System.Collections.Generic.ICollection<T> |
Alles |
System.Collections.Generic.IDictionary<TKey, TValue> |
Alles |
System.Collections.Generic.IEnumerable<T> |
Alles |
System.Collections.Generic.IEnumerator<T> |
Alles |
System.Collections.Generic.IList<T> |
Alles |
System.Collections.Generic.IReadOnlyCollection<T> |
Alles |
System.Collections.Generic.IReadOnlyDictionary<TKey, TValue> |
Alles |
System.Collections.Generic.ISet<T> |
Alles |
System.Collections.Generic.KeyValuePair<TKey, TValue> |
Alles |
System.Collections.Generic.List<T> |
Alles |
System.Collections.Generic.Queue<T> |
Alles |
System.Collections.Generic.Stack<T> |
Alles |
System.Convert |
Alles |
System.DateTime |
(Constructor), Add , AddDays , AddHours , AddMilliseconds , AddMinutes , AddMonths , AddSeconds , , AddYears Date DayOfYear DayOfWeek Day DaysInMonth AddTicks , Hour , IsDaylightSavingTime , Minute Millisecond MinValue Now IsLeapYear MaxValue Month , , UtcNow Parse Second Subtract Ticks TimeOfDay Today ToString Year |
System.DateTimeKind |
Utc |
System.DateTimeOffset |
Alles |
System.Decimal |
Alles |
System.Double |
Alles |
System.Enum |
Parse , TryParse , ToString |
System.Exception |
Alles |
System.Guid |
Alles |
System.Int16 |
Alles |
System.Int32 |
Alles |
System.Int64 |
Alles |
System.IO.StringReader |
Alles |
System.IO.StringWriter |
Alles |
System.Linq.Enumerable |
Alles |
System.Math |
Alles |
System.MidpointRounding |
Alles |
System.Net.IPAddress |
AddressFamily , Equals , GetAddressBytes , IsLoopback , Parse , TryParse , ToString |
System.Net.WebUtility |
Alles |
System.Nullable |
Alles |
System.Random |
Alles |
System.SByte |
Alles |
System.Security.Cryptography.AsymmetricAlgorithm |
Alles |
System.Security.Cryptography.CipherMode |
Alles |
System.Security.Cryptography.HashAlgorithm |
Alles |
System.Security.Cryptography.HashAlgorithmName |
Alles |
System.Security.Cryptography.HMAC |
Alles |
System.Security.Cryptography.HMACMD5 |
Alles |
System.Security.Cryptography.HMACSHA1 |
Alles |
System.Security.Cryptography.HMACSHA256 |
Alles |
System.Security.Cryptography.HMACSHA384 |
Alles |
System.Security.Cryptography.HMACSHA512 |
Alles |
System.Security.Cryptography.KeyedHashAlgorithm |
Alles |
System.Security.Cryptography.MD5 |
Alles |
System.Security.Cryptography.Oid |
Alles |
System.Security.Cryptography.PaddingMode |
Alles |
System.Security.Cryptography.RNGCryptoServiceProvider |
Alles |
System.Security.Cryptography.RSA |
Alles |
System.Security.Cryptography.RSAEncryptionPadding |
Alles |
System.Security.Cryptography.RSASignaturePadding |
Alles |
System.Security.Cryptography.SHA1 |
Alles |
System.Security.Cryptography.SHA1Managed |
Alles |
System.Security.Cryptography.SHA256 |
Alles |
System.Security.Cryptography.SHA256Managed |
Alles |
System.Security.Cryptography.SHA384 |
Alles |
System.Security.Cryptography.SHA384Managed |
Alles |
System.Security.Cryptography.SHA512 |
Alles |
System.Security.Cryptography.SHA512Managed |
Alles |
System.Security.Cryptography.SymmetricAlgorithm |
Alles |
System.Security.Cryptography.X509Certificates.PublicKey |
Alles |
System.Security.Cryptography.X509Certificates.RSACertificateExtensions |
Alles |
System.Security.Cryptography.X509Certificates.X500DistinguishedName |
Name |
System.Security.Cryptography.X509Certificates.X509Certificate |
Alles |
System.Security.Cryptography.X509Certificates.X509Certificate2 |
Alles |
System.Security.Cryptography.X509Certificates.X509ContentType |
Alles |
System.Security.Cryptography.X509Certificates.X509NameType |
Alles |
System.Single |
Alles |
System.String |
Alles |
System.StringComparer |
Alles |
System.StringComparison |
Alles |
System.StringSplitOptions |
Alles |
System.Text.Encoding |
Alles |
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 |
Alles |
System.Text.StringBuilder |
Alles |
System.TimeSpan |
Alles |
System.TimeZone |
Alles |
System.TimeZoneInfo.AdjustmentRule |
Alles |
System.TimeZoneInfo.TransitionTime |
Alles |
System.TimeZoneInfo |
Alles |
System.Tuple |
Alles |
System.UInt16 |
Alles |
System.UInt32 |
Alles |
System.UInt64 |
Alles |
System.Uri |
Alles |
System.UriPartial |
Alles |
System.Xml.Linq.Extensions |
Alles |
System.Xml.Linq.XAttribute |
Alles |
System.Xml.Linq.XCData |
Alles |
System.Xml.Linq.XComment |
Alles |
System.Xml.Linq.XContainer |
Alles |
System.Xml.Linq.XDeclaration |
Alles |
System.Xml.Linq.XDocument |
Alle, behalve Load |
System.Xml.Linq.XDocumentType |
Alles |
System.Xml.Linq.XElement |
Alles |
System.Xml.Linq.XName |
Alles |
System.Xml.Linq.XNamespace |
Alles |
System.Xml.Linq.XNode |
Alles |
System.Xml.Linq.XNodeDocumentOrderComparer |
Alles |
System.Xml.Linq.XNodeEqualityComparer |
Alles |
System.Xml.Linq.XObject |
Alles |
System.Xml.Linq.XProcessingInstruction |
Alles |
System.Xml.Linq.XText |
Alles |
System.Xml.XmlNodeType |
Alles |
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 tijdLastError Operation Product Request RequestId : Guid - unieke aanvraag-idResponse Subscription Timestamp : DateTime - tijdstip waarop de aanvraag is ontvangenTracing : bool - geeft aan of tracering is in- of uitgeschakeldGebruiker Variables : IReadOnlyDictionary<string, object> void Trace(message: string) |
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.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 |
Apis : IEnumerable< IApi > ApprovalRequired : bool Groups : IEnumerable< IGroup > Id : string Name : string State : enum ProductState {NotPublished, Published} SubscriptionLimit : 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 door komma's gescheiden aanvraagheaderwaarden of defaultValue als de header niet is 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 is 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 |
IApi |
Id : string Name : string Path : string Protocols : IEnumerable<string> ServiceUrl : IUrl SubscriptionKeyParameterNames : ISubscriptionKeyParameterNames |
IGroup |
Id : string Name : string |
IMessageBody |
As<T>(preserveContent: bool = false): Where T: string, byte[],JObject, JToken, JArray, XNode, XElement, XDocument De context.Request.Body.As<T> methoden en context.Response.Body.As<T> worden gebruikt voor het lezen van een aanvraag- en antwoordberichttekst in het opgegeven type T . De methode is standaard:
Als u dat wilt voorkomen en de methode wilt laten werken op een kopie van de hoofdstroom, stelt u de preserveContent parameter in op true , zoals in dit voorbeeld. |
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 |
IUserIdentity |
Id : string Provider : 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 is gevonden. |
T context.Variables.GetValueOrDefault<T>(variableName: string, defaultValue: T) |
variableName : string defaultValue : T Retourneert de variabelewaarde die naar het type T wordt gecast of defaultValue als de variabele niet wordt gevonden.Deze methode genereert een uitzondering 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 http-basisverificatie voor autorisatie 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-basisverificatie 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 is 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 - coderingstekst 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 - coderingstekst die moet worden ontsleuteldalg -CoderingsalgoritmeRetourneert tekst zonder opmaak. |
byte[] Decrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm, key:byte[], iv:byte[]) |
input - coderingstekst 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 is geslaagd; false als de validatie mislukt. |
Volgende stappen
Zie voor meer informatie over het werken met beleidsregels:
- Beleid in API Management
- API's transformeren
- Naslaginformatie over beleid voor een volledige lijst met beleidsinstructies en de bijbehorende instellingen
- Voorbeelden van beleid
Voor meer informatie:
- Zie hoe u contextinformatie kunt leveren aan uw back-endservice. Gebruik de parameter Queryreeks instellen en HTTP-headerbeleid instellen om deze informatie op te geven.
- Zie het beleid JWT valideren gebruiken om vooraf toegang tot bewerkingen te autoriseren op basis van tokenclaims.
- Zie hoe u een API Inspector-tracering gebruikt om te detecteren hoe beleid wordt geëvalueerd en de resultaten van deze evaluaties.
- Zie hoe u expressies gebruikt met het beleid Ophalen uit cache en Opslaan naar cache om API Management antwoordcaching te configureren. Stel een duur in die overeenkomt met de reactiecache van de back-endservice, zoals opgegeven door de instructie van
Cache-Control
de ondersteunde service. - Meer informatie over het filteren van inhoud. Verwijder gegevenselementen uit het antwoord dat is ontvangen van de back-end met behulp van het beleid Beheerstroom en Hoofdtekst instellen .
- Zie de GitHub-opslagplaats api-management-samples/policies om de beleidsinstructies te downloaden.