API Management beleidsexpressies

In dit artikel wordt de syntaxis van beleidsexpressies in C# 7 besproken. Elke expressie heeft toegang tot:

Syntax

  • Expressies met één instructie:
    • Ingesloten in @(expression), waarbij expression een goed opgemaakte C#-expressie-instructie is.
  • Expressies met meerdere instructies:
    • Ingesloten in @{expression}.
    • Alle codepaden binnen expressies met meerdere instructies moeten eindigen op een return -instructie.

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, , AddYearsDateDayOfYearDayOfWeekDayDaysInMonthAddTicks, Hour, IsDaylightSavingTime, MinuteMillisecondMinValueNowIsLeapYearMaxValueMonth, , UtcNowParseSecondSubtractTicksTimeOfDayTodayToStringYear
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, , UnescapeSplit
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 tijd

LastError

Operation

Product

Request

RequestId: Guid - unieke aanvraag-id

Response

Subscription

Timestamp: DateTime - tijdstip waarop de aanvraag is ontvangen

Tracing: bool - geeft aan of tracering is in- of uitgeschakeld

Gebruiker

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 overcontext.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:
  • Maakt gebruik van de oorspronkelijke berichttekststroom.
  • Hiermee wordt deze niet beschikbaar nadat deze is geretourneerd.

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 falsede 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 nullde 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 falsede 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 versleuteld

alg - naam van een symmetrisch versleutelingsalgoritmen

key -Coderingssleutel

iv - initialisatievector

Retourneert versleutelde tekst zonder opmaak.
byte[] Encrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm) input - tekst zonder opmaak die moet worden versleuteld

alg -Coderingsalgoritme

Retourneert 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 versleuteld

alg -Coderingsalgoritme

key -Coderingssleutel

iv - initialisatievector

Retourneert versleutelde tekst zonder opmaak.
byte[] Decrypt(input: this byte[], alg: string, key:byte[], iv:byte[]) input - coderingstekst die moet worden ontsleuteld

alg - naam van een symmetrisch versleutelingsalgoritmen

key -Coderingssleutel

iv - initialisatievector

Retourneert tekst zonder opmaak.
byte[] Decrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm) input - coderingstekst die moet worden ontsleuteld

alg -Coderingsalgoritme

Retourneert tekst zonder opmaak.
byte[] Decrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm, key:byte[], iv:byte[]) input - coderingstekst die moet worden ontsleuteld

alg -Coderingsalgoritme

key -Coderingssleutel

iv - initialisatievector

Retourneert tekst zonder opmaak.
bool VerifyNoRevocation(input: this System.Security.Cryptography.X509Certificates.X509Certificate2) Voert een X.509-ketenvalidatie uit zonder de certificaatintrekkingsstatus te controleren.

input - certificaatobject

Retourneert true als de validatie is geslaagd; false als de validatie mislukt.

Volgende stappen

Zie voor meer informatie over het werken met beleidsregels:

Voor meer informatie: