Ekspresi kebijakan API Management
BERLAKU UNTUK: Semua tingkatAN API Management
Artikel ini membahas sintaks ekspresi kebijakan di C# 7. Setiap ekspresi memiliki akses ke:
- Variabel konteks yang disediakan secara implisit.
- Subset yang diperbolehkan dari jenis .NET Framework.
Sintaks
- Ekspresi pernyataan tunggal:
- Diapit di
@(expression)
, di manaexpression
merupakan adalah pernyataan ekspresi C# yang terbentuk dengan baik.
- Diapit di
- Ekspresi multi-pernyataan:
- Diapit di
@{expression}
. - Semua jalur kode dalam ekspresi multi-pernyataan harus diakhiri dengan pernyataan
return
.
- Diapit di
Contoh
@(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;
}
Penggunaan
Kecuali jika kebijakan menentukan sebaliknya, ekspresi dapat digunakan sebagai nilai atribut atau nilai teks dalam kebijakan API Management mana pun.
Penting
Ketika kebijakan ditentukan, ekspresi kebijakan hanya memiliki verifikasi terbatas. Ekspresi dijalankan oleh gateway pada run-time. Setiap pengecualian yang dihasilkan oleh ekspresi kebijakan mengakibatkan kesalahan runtime.
Jenis .NET Framework yang diizinkan dalam ekspresi kebijakan
Tabel berikut ini mencantumkan jenis .NET Framework dan anggota yang diperbolehkan dalam ekspresi kebijakan.
Jenis | Anggota yang didukung |
---|---|
Newtonsoft.Json.Formatting |
Semua |
Newtonsoft.Json.JsonConvert |
SerializeObject , DeserializeObject |
Newtonsoft.Json.Linq.Extensions |
Semua |
Newtonsoft.Json.Linq.JArray |
Semua |
Newtonsoft.Json.Linq.JConstructor |
Semua |
Newtonsoft.Json.Linq.JContainer |
Semua |
Newtonsoft.Json.Linq.JObject |
Semua |
Newtonsoft.Json.Linq.JProperty |
Semua |
Newtonsoft.Json.Linq.JRaw |
Semua |
Newtonsoft.Json.Linq.JToken |
Semua |
Newtonsoft.Json.Linq.JTokenType |
Semua |
Newtonsoft.Json.Linq.JValue |
Semua |
System.Array |
Semua |
System.BitConverter |
Semua |
System.Boolean |
Semua |
System.Byte |
Semua |
System.Char |
Semua |
System.Collections.Generic.Dictionary<TKey, TValue> |
Semua |
System.Collections.Generic.HashSet<T> |
Semua |
System.Collections.Generic.ICollection<T> |
Semua |
System.Collections.Generic.IDictionary<TKey, TValue> |
Semua |
System.Collections.Generic.IEnumerable<T> |
Semua |
System.Collections.Generic.IEnumerator<T> |
Semua |
System.Collections.Generic.IList<T> |
Semua |
System.Collections.Generic.IReadOnlyCollection<T> |
Semua |
System.Collections.Generic.IReadOnlyDictionary<TKey, TValue> |
Semua |
System.Collections.Generic.ISet<T> |
Semua |
System.Collections.Generic.KeyValuePair<TKey, TValue> |
Semua |
System.Collections.Generic.List<T> |
Semua |
System.Collections.Generic.Queue<T> |
Semua |
System.Collections.Generic.Stack<T> |
Semua |
System.Convert |
Semua |
System.DateTime |
(Konstruktor), Add , AddDays , AddHours , AddMilliseconds , AddMinutes , AddMonths , AddSeconds , AddTicks , AddYears , Date , Day , DayOfWeek , DayOfYear , DaysInMonth , Hour , IsDaylightSavingTime , IsLeapYear , MaxValue , Millisecond , Minute , MinValue , Month , Now , Parse , Second , Subtract , Ticks , TimeOfDay , Today , ToString , UtcNow , Year |
System.DateTimeKind |
Utc |
System.DateTimeOffset |
Semua |
System.Decimal |
Semua |
System.Double |
Semua |
System.Enum |
Parse , , TryParse ToString |
System.Exception |
Semua |
System.Guid |
Semua |
System.Int16 |
Semua |
System.Int32 |
Semua |
System.Int64 |
Semua |
System.IO.StringReader |
Semua |
System.IO.StringWriter |
Semua |
System.Linq.Enumerable |
Semua |
System.Math |
Semua |
System.MidpointRounding |
Semua |
System.Net.IPAddress |
AddressFamily , , Equals GetAddressBytes , IsLoopback , Parse , , TryParse ,ToString |
System.Net.WebUtility |
Semua |
System.Nullable |
Semua |
System.Random |
Semua |
System.SByte |
Semua |
System.Security.Cryptography.AsymmetricAlgorithm |
Semua |
System.Security.Cryptography.CipherMode |
Semua |
System.Security.Cryptography.HashAlgorithm |
Semua |
System.Security.Cryptography.HashAlgorithmName |
Semua |
System.Security.Cryptography.HMAC |
Semua |
System.Security.Cryptography.HMACMD5 |
Semua |
System.Security.Cryptography.HMACSHA1 |
Semua |
System.Security.Cryptography.HMACSHA256 |
Semua |
System.Security.Cryptography.HMACSHA384 |
Semua |
System.Security.Cryptography.HMACSHA512 |
Semua |
System.Security.Cryptography.KeyedHashAlgorithm |
Semua |
System.Security.Cryptography.MD5 |
Semua |
System.Security.Cryptography.Oid |
Semua |
System.Security.Cryptography.PaddingMode |
Semua |
System.Security.Cryptography.RNGCryptoServiceProvider |
Semua |
System.Security.Cryptography.RSA |
Semua |
System.Security.Cryptography.RSAEncryptionPadding |
Semua |
System.Security.Cryptography.RSASignaturePadding |
Semua |
System.Security.Cryptography.SHA1 |
Semua |
System.Security.Cryptography.SHA1Managed |
Semua |
System.Security.Cryptography.SHA256 |
Semua |
System.Security.Cryptography.SHA256Managed |
Semua |
System.Security.Cryptography.SHA384 |
Semua |
System.Security.Cryptography.SHA384Managed |
Semua |
System.Security.Cryptography.SHA512 |
Semua |
System.Security.Cryptography.SHA512Managed |
Semua |
System.Security.Cryptography.SymmetricAlgorithm |
Semua |
System.Security.Cryptography.X509Certificates.PublicKey |
Semua |
System.Security.Cryptography.X509Certificates.RSACertificateExtensions |
Semua |
System.Security.Cryptography.X509Certificates.X500DistinguishedName |
Name |
System.Security.Cryptography.X509Certificates.X509Certificate |
Semua |
System.Security.Cryptography.X509Certificates.X509Certificate2 |
Semua |
System.Security.Cryptography.X509Certificates.X509ContentType |
Semua |
System.Security.Cryptography.X509Certificates.X509NameType |
Semua |
System.Single |
Semua |
System.String |
Semua |
System.StringComparer |
Semua |
System.StringComparison |
Semua |
System.StringSplitOptions |
Semua |
System.Text.Encoding |
Semua |
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 |
(Konstruktor), IsMatch , Match , Matches , Replace , Unescape , Split |
System.Text.RegularExpressions.RegexOptions |
Semua |
System.Text.StringBuilder |
Semua |
System.TimeSpan |
Semua |
System.TimeZone |
Semua |
System.TimeZoneInfo.AdjustmentRule |
Semua |
System.TimeZoneInfo.TransitionTime |
Semua |
System.TimeZoneInfo |
Semua |
System.Tuple |
Semua |
System.UInt16 |
Semua |
System.UInt32 |
Semua |
System.UInt64 |
Semua |
System.Uri |
Semua |
System.UriPartial |
Semua |
System.Xml.Linq.Extensions |
Semua |
System.Xml.Linq.XAttribute |
Semua |
System.Xml.Linq.XCData |
Semua |
System.Xml.Linq.XComment |
Semua |
System.Xml.Linq.XContainer |
Semua |
System.Xml.Linq.XDeclaration |
Semua |
System.Xml.Linq.XDocument |
Semua kecuali Load |
System.Xml.Linq.XDocumentType |
Semua |
System.Xml.Linq.XElement |
Semua |
System.Xml.Linq.XName |
Semua |
System.Xml.Linq.XNamespace |
Semua |
System.Xml.Linq.XNode |
Semua |
System.Xml.Linq.XNodeDocumentOrderComparer |
Semua |
System.Xml.Linq.XNodeEqualityComparer |
Semua |
System.Xml.Linq.XObject |
Semua |
System.Xml.Linq.XProcessingInstruction |
Semua |
System.Xml.Linq.XText |
Semua |
System.Xml.XmlNodeType |
Semua |
Variabel konteks
Variabel context
secara implisit tersedia dalam setiap ekspresi kebijakan. Anggotanya:
- Memberikan informasi yang relevan dengan permintaan dan responsAPI, serta properti terkait.
- Semuanya bersifat baca-saja.
Variabel Konteks | Metode, properti, dan nilai parameter yang diizinkan |
---|---|
context |
Api : IApi Deployment Berlalu: TimeSpan - interval waktu antara nilai dari Timestamp dan waktu saat iniGraphQL LastError Operation Request RequestId : Guid - pengidentifikasi permintaan unikResponse Subscription Timestamp : DateTime - titik waktu saat permintaan diterimaTracing : bool - menunjukkan apakah pelacakan aktif atau nonaktif Pengguna 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 (mengembalikan 'dikelola' untuk gateway terkelola)Region : string ServiceId : string ServiceName : string Certificates : IReadOnlyDictionary<string, X509Certificate2> |
context.Deployment.Gateway |
Id : string (mengembalikan 'dikelola' untuk gateway terkelola)InstanceId : string (mengembalikan 'dikelola' untuk gateway terkelola)IsManaged : bool |
context.GraphQL |
GraphQLArguments : IGraphQLDataObject Parent : IGraphQLDataObject Contoh |
context.LastError |
Source : string Reason : string Message : string Scope : string Section : string Path : string PolicyId : string Untuk informasi selengkapnya tentang context.LastError , lihat Penanganan kesalahan. |
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 atau null jika permintaan tidak memiliki isi.Certificate : System.Security.Cryptography.X509Certificates.X509Certificate2 Headers : IReadOnlyDictionary<string, string[]> IpAddress : string MatchedParameters : IReadOnlyDictionary<string, string> Method : string OriginalUrl : IUrl Url : IUrl PrivateEndpointConnection : IPrivateEndpointConnection atau null jika permintaan tidak datang dari koneksi titik akhir privat. |
string context.Request.Headers.GetValueOrDefault(headerName: string, defaultValue: string) |
headerName : string defaultValue : string Mengembalikan nilai header permintaan yang dipisahkan koma atau defaultValue jika header tidak ditemukan. |
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 Mengembalikan nilai header respons yang dipisahkan koma atau defaultValue jika header tidak ditemukan. |
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 |
TBD |
IGroup |
Id : string Name : string |
IMessageBody |
As<T>(bool preserveContent = false): Where T: string, byte[], JObject, JToken, JArray, XNode, XElement, XDocument - Metode context.Request.Body.As<T> dan context.Response.Body.As<T> membaca isi pesan permintaan atau respons dalam jenis T yang ditentukan . -Atau- AsFormUrlEncodedContent(bool preserveContent = false) - Metode context.Request.Body.AsFormUrlEncodedContent() dan context.Response.Body.AsFormUrlEncodedContent() membaca data formulir yang dikodekan URL dalam isi pesan permintaan atau respons dan mengembalikan IDictionary<string, IList<string> objek. Objek yang didekodekan mendukung IDictionary operasi dan ekspresi berikut: ToQueryString() , , JsonConvert.SerializeObject() ToFormUrlEncodedContent(). Secara default, As<T> metode dan AsFormUrlEncodedContent() :
Untuk menghindarinya dan meminta metode beroperasi pada salinan aliran isi, atur preserveContent parameter ke true , seperti yang ditunjukkan dalam contoh untuk kebijakan set-body . |
IPrivateEndpointConnection |
Name : string GroupId : string MemberName : string Untuk informasi selengkapnya, lihat REST API. |
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 Mengembalikan nilai parameter kueri yang dipisahkan koma atau defaultValue jika parameter tidak ditemukan. |
IUserIdentity |
Id : string Provider : string |
T context.Variables.GetValueOrDefault<T>(variableName: string, defaultValue: T) |
variableName : string defaultValue : T Mengembalikan nilai variabel yang ditransmisikan ke jenis T atau defaultValue jika variabel tidak ditemukan.Metode ini memberikan pengecualian jika jenis yang ditentukan tidak cocok dengan jenis aktual dari variabel yang dikembalikan. |
BasicAuthCredentials AsBasic(input: this string) |
input : string Jika parameter input berisi nilai header permintaan Autentikasi Dasar HTTP yang valid, metode mengembalikan objek berjenis BasicAuthCredentials ; jika tidak, metode mengembalikan null. |
bool TryParseBasic(input: this string, result: out BasicAuthCredentials) |
input : string result : out BasicAuthCredentials Jika parameter input berisi nilai otorisasi Autentikasi Dasar HTTP yang valid di header permintaan, metode mengembalikan true dan parameter hasil berisi nilai berjenis BasicAuthCredentials ; jika tidak, metode akan mengembalikan false . |
BasicAuthCredentials |
Password : string UserId : string |
Jwt AsJwt(input: this string) |
input : string Jika parameter input berisi nilai token JWT yang valid, metode mengembalikan objek berjenis Jwt ; jika tidak, metode akan mengembalikan null . |
bool TryParseJwt(input: this string, result: out Jwt) |
input : string result : out Jwt Jika parameter input berisi nilai token JWT yang valid, metode mengembalikan true dan parameter hasil berisi nilai berjenis Jwt ; jika tidak, metode akan mengembalikan false . |
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 Mengembalikan nilai klaim yang dipisahkan koma atau defaultValue jika header tidak ditemukan. |
byte[] Encrypt(input: this byte[], alg: string, key:byte[], iv:byte[]) |
input - plaintext yang akan dienkripsialg - nama algoritma enkripsi simetriskey - kunci enkripsiiv - vektor inisialisasiMengembalikan plaintext terenkripsi. |
byte[] Encrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm) |
input - plaintext yang akan dienkripsialg - algoritma enkripsiMengembalikan plaintext terenkripsi. |
byte[] Encrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm, key:byte[], iv:byte[]) |
input - plaintext yang akan dienkripsialg - algoritma enkripsikey - kunci enkripsiiv - vektor inisialisasiMengembalikan plaintext terenkripsi. |
byte[] Decrypt(input: this byte[], alg: string, key:byte[], iv:byte[]) |
input - teks cypher yang akan didekripsialg - nama algoritma enkripsi simetriskey - kunci enkripsiiv - vektor inisialisasiMengembalikan plaintext. |
byte[] Decrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm) |
input - teks cypher yang akan didekripsialg - algoritma enkripsiMengembalikan plaintext. |
byte[] Decrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm, key:byte[], iv:byte[]) |
input - teks cypher yang akan didekripsialg - algoritma enkripsikey - kunci enkripsiiv - vektor inisialisasiMengembalikan plaintext. |
bool VerifyNoRevocation(input: this System.Security.Cryptography.X509Certificates.X509Certificate2) |
Melakukan validasi rantai X.509 tanpa memeriksa status pencabutan sertifikat.input - objek sertifikatMengembalikan true jika validasi berhasil; false jika validasi gagal. |
Konten terkait
Untuk informasi selengkapnya tentang bekerja dengan kebijakan, lihat:
- Kebijakan di API Management
- Tutorial: Mentransformasi dan melindungi API
- Referensi Kebijakan untuk daftar lengkap pernyataan kebijakan dan pengaturannya
- Repositori cuplikan kebijakan
- Kebijakan penulis menggunakan Microsoft Copilot di Azure
Untuk informasi selengkapnya:
- Lihat cara memberikan informasi konteks ke layanan backend Anda. Gunakan kebijakan Atur parameter string kueri dan Atur header HTTP untuk menyediakan informasi ini.
- Lihat cara menggunakan kebijakan Validasi JWT untuk mengotorisasi akses terlebih dahulu ke operasi berdasarkan klaim token.
- Lihat cara menggunakan jejak API Inspector untuk mendeteksi bagaimana kebijakan dievaluasi dan hasil evaluasi tersebut.
- Lihat cara menggunakan ekspresi dengan kebijakan Dapatkan dari cache dan Simpan ke cache untuk mengonfigurasi pembuatan cache respons API Management. Atur durasi yang cocok dengan pembuatan cache respons layanan backend seperti yang ditentukan oleh arahan
Cache-Control
layanan backend. - Lihat cara melakukan pemfilteran konten. Hapus elemen data dari respons yang diterima dari backend menggunakan kebijakan Alur kontrol dan Isi kumpulan.
- Untuk mengunduh pernyataan kebijakan, lihat repo GitHub api-management-samples/policies.