Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление API
В этой статье описан синтаксис выражений политики C# 7. Каждое выражение имеет доступ к:
- неявно заданной переменной контекста;
- допустимому подмножеству типов платформы .NET Framework.
Синтаксис
-
Выражения с одним оператором:
- Выражения с одним оператором заключаются в элементы
@(expression), гдеexpression— оператор выражения C# в соответствующем формате.
- Выражения с одним оператором заключаются в элементы
-
Выражения с несколькими операторами:
- Заключены внутри
@{expression}. - Все ветви кода в выражениях с несколькими операторами должны заканчиваться оператором
return.
- Заключены внутри
Примеры
@(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;
}
Использование
Если в справочнике по политике не указано иное, выражения можно использовать в качестве значений атрибутов или текстовых значений в любой политике службы управления API.
Внимание
Если политика определена, выражения политики имеют ограниченную проверку. Выражения выполняются шлюзом во время выполнения. Генерируемые политикой исключения приводят к ошибкам времени выполнения.
платформа .NET Framework типы, разрешенные в выражениях политики
В следующей таблице перечислены типы .NET Framework и их члены, которые можно использовать в выражениях политики.
| Тип | Поддерживаемые члены |
|---|---|
Newtonsoft.Json.Formatting |
Все |
Newtonsoft.Json.JsonConvert |
SerializeObject, DeserializeObject |
Newtonsoft.Json.Linq.Extensions |
Все |
Newtonsoft.Json.Linq.JArray |
Все |
Newtonsoft.Json.Linq.JConstructor |
Все |
Newtonsoft.Json.Linq.JContainer |
Все |
Newtonsoft.Json.Linq.JObject |
Все |
Newtonsoft.Json.Linq.JProperty |
Все |
Newtonsoft.Json.Linq.JRaw |
Все |
Newtonsoft.Json.Linq.JToken |
Все |
Newtonsoft.Json.Linq.JTokenType |
Все |
Newtonsoft.Json.Linq.JValue |
Все |
System.Array |
Все |
System.BitConverter |
Все |
System.Boolean |
Все |
System.Byte |
Все |
System.Char |
Все |
System.Collections.Generic.Dictionary<TKey, TValue> |
Все |
System.Collections.Generic.HashSet<T> |
Все |
System.Collections.Generic.ICollection<T> |
Все |
System.Collections.Generic.IDictionary<TKey, TValue> |
Все |
System.Collections.Generic.IEnumerable<T> |
Все |
System.Collections.Generic.IEnumerator<T> |
Все |
System.Collections.Generic.IList<T> |
Все |
System.Collections.Generic.IReadOnlyCollection<T> |
Все |
System.Collections.Generic.IReadOnlyDictionary<TKey, TValue> |
Все |
System.Collections.Generic.ISet<T> |
Все |
System.Collections.Generic.KeyValuePair<TKey, TValue> |
Все |
System.Collections.Generic.List<T> |
Все |
System.Collections.Generic.Queue<T> |
Все |
System.Collections.Generic.Stack<T> |
Все |
System.Convert |
Все |
System.DateTime |
(Конструктор), 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 |
Все |
System.Decimal |
Все |
System.Double |
Все |
System.Enum |
Parse, , TryParseToString |
System.Exception |
Все |
System.Guid |
Все |
System.Int16 |
Все |
System.Int32 |
Все |
System.Int64 |
Все |
System.IO.StringReader |
Все |
System.IO.StringWriter |
Все |
System.Linq.Enumerable |
Все |
System.Math |
Все |
System.MidpointRounding |
Все |
System.Net.IPAddress |
AddressFamily, Equals, GetAddressBytesIsLoopbackParseTryParseToString |
System.Net.WebUtility |
Все |
System.Nullable |
Все |
System.Random |
Все |
System.SByte |
Все |
System.Security.Cryptography.AsymmetricAlgorithm |
Все |
System.Security.Cryptography.CipherMode |
Все |
System.Security.Cryptography.HashAlgorithm |
Все |
System.Security.Cryptography.HashAlgorithmName |
Все |
System.Security.Cryptography.HMAC |
Все |
System.Security.Cryptography.HMACMD5 |
Все |
System.Security.Cryptography.HMACSHA1 |
Все |
System.Security.Cryptography.HMACSHA256 |
Все |
System.Security.Cryptography.HMACSHA384 |
Все |
System.Security.Cryptography.HMACSHA512 |
Все |
System.Security.Cryptography.KeyedHashAlgorithm |
Все |
System.Security.Cryptography.MD5 |
Все |
System.Security.Cryptography.Oid |
Все |
System.Security.Cryptography.PaddingMode |
Все |
System.Security.Cryptography.RNGCryptoServiceProvider |
Все |
System.Security.Cryptography.RSA |
Все |
System.Security.Cryptography.RSAEncryptionPadding |
Все |
System.Security.Cryptography.RSASignaturePadding |
Все |
System.Security.Cryptography.SHA1 |
Все |
System.Security.Cryptography.SHA1Managed |
Все |
System.Security.Cryptography.SHA256 |
Все |
System.Security.Cryptography.SHA256Managed |
Все |
System.Security.Cryptography.SHA384 |
Все |
System.Security.Cryptography.SHA384Managed |
Все |
System.Security.Cryptography.SHA512 |
Все |
System.Security.Cryptography.SHA512Managed |
Все |
System.Security.Cryptography.SymmetricAlgorithm |
Все, кроме безпараметрных Create() |
System.Security.Cryptography.X509Certificates.PublicKey |
Все |
System.Security.Cryptography.X509Certificates.RSACertificateExtensions |
Все |
System.Security.Cryptography.X509Certificates.X500DistinguishedName |
Name |
System.Security.Cryptography.X509Certificates.X509Certificate |
Все |
System.Security.Cryptography.X509Certificates.X509Certificate2 |
Все |
System.Security.Cryptography.X509Certificates.X509ContentType |
Все |
System.Security.Cryptography.X509Certificates.X509NameType |
Все |
System.Single |
Все |
System.String |
Все |
System.StringComparer |
Все |
System.StringComparison |
Все |
System.StringSplitOptions |
Все |
System.Text.Encoding |
Все |
System.Text.RegularExpressions.Capture |
Index, , LengthValue |
System.Text.RegularExpressions.CaptureCollection |
Count, Item |
System.Text.RegularExpressions.Group |
Captures, Success |
System.Text.RegularExpressions.GroupCollection |
Count, Item |
System.Text.RegularExpressions.Match |
Empty, , GroupsResult |
System.Text.RegularExpressions.Regex |
(Конструктор), IsMatch, Match, Matches, Replace, Unescape, Split |
System.Text.RegularExpressions.RegexOptions |
Все |
System.Text.StringBuilder |
Все |
System.TimeSpan |
Все |
System.TimeZone |
Все |
System.TimeZoneInfo.AdjustmentRule |
Все |
System.TimeZoneInfo.TransitionTime |
Все |
System.TimeZoneInfo |
Все |
System.Tuple |
Все |
System.UInt16 |
Все |
System.UInt32 |
Все |
System.UInt64 |
Все |
System.Uri |
Все |
System.UriPartial |
Все |
System.Xml.Linq.Extensions |
Все |
System.Xml.Linq.XAttribute |
Все |
System.Xml.Linq.XCData |
Все |
System.Xml.Linq.XComment |
Все |
System.Xml.Linq.XContainer |
Все |
System.Xml.Linq.XDeclaration |
Все |
System.Xml.Linq.XDocument |
Все, кроме Load |
System.Xml.Linq.XDocumentType |
Все |
System.Xml.Linq.XElement |
Все |
System.Xml.Linq.XName |
Все |
System.Xml.Linq.XNamespace |
Все |
System.Xml.Linq.XNode |
Все |
System.Xml.Linq.XNodeDocumentOrderComparer |
Все |
System.Xml.Linq.XNodeEqualityComparer |
Все |
System.Xml.Linq.XObject |
Все |
System.Xml.Linq.XProcessingInstruction |
Все |
System.Xml.Linq.XText |
Все |
System.Xml.XmlNodeType |
Все |
Переменная контекста
Переменная context неявно доступна в каждом выражении политики. Ее элементы:
- Укажите сведения, относящиеся к запросу и ответу API, а также связанные свойства.
- Все доступны только для чтения.
| Переменная контекста | Допустимые методы, свойства и значения параметров |
|---|---|
context |
Api: IApiBackendDeploymentElapsed: TimeSpan — интервал времени между значением Timestamp и текущим временем.GraphQLLastErrorOperationRequestRequestId: Guid — уникальный идентификатор запроса.ResponseSubscriptionTimestamp: DateTime — время получения запроса.Tracing: bool — указывает, включена или отключена трассировка Пользователь Variables: IReadOnlyDictionary<string, object>void Trace(message: string) Workspace |
context.Api |
Id: stringIsCurrentRevision: boolName: stringPath: stringRevision: stringServiceUrl: IUrlVersion: string |
context.Backend |
AzureRegion: stringId: stringType: enum BackendType {Single, Pool} |
context.Deployment |
GatewayGatewayId: string (для управляемых шлюзов возвращает значение managed).Region: stringServiceId: stringServiceName: stringSustainabilityInfoCertificates: IReadOnlyDictionary<string, X509Certificate2> |
context.Deployment.Gateway |
Id: string (для управляемых шлюзов возвращает значение managed).InstanceId: string (для управляемых шлюзов возвращает значение managed).IsManaged: bool |
context.Deployment.SustainabilityInfo |
CurrentCarbonIntensity: Энум углеродИнтенсивностьКатегория |
context.GraphQL |
GraphQLArguments: IGraphQLDataObjectParent: IGraphQLDataObjectПримеры |
context.LastError |
Source: stringReason: stringMessage: stringScope: stringSection: stringPath: stringPolicyId: stringДополнительные сведения о context.LastError см. в статье Обработка ошибок. |
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 или null, если в запросе нет текста.Certificate: System.Security.Cryptography.X509Certificates.X509Certificate2FoundryHeaders: IReadOnlyDictionary<string, string[]>IpAddress: stringMatchedParameters: IReadOnlyDictionary<string, string>Method: stringOriginalUrl: IUrlUrl: IUrlPrivateEndpointConnection: IPrivateEndpointConnection или null, если запрос поступил не от подключения частной командной точки. |
context.Request.Foundry |
Deployment: string — идентификатор развертывания модели в Microsoft Foundry, связанный с запросом. |
string context.Request.Headers.GetValueOrDefault(headerName: string, defaultValue: string) |
headerName: stringdefaultValue: stringВозвращает значения заголовков запросов, разделенные запятыми, или значение defaultValue, если заголовок не найден. |
context.Response |
Body: IMessageBodyHeaders: IReadOnlyDictionary<string, string[]>StatusCode: intStatusReason: string |
string context.Response.Headers.GetValueOrDefault(headerName: string, defaultValue: string) |
headerName: stringdefaultValue: stringВозвращает значения заголовков ответов, разделенные запятыми, или значение defaultValue, если заголовок не найден. |
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 |
Подлежит уточнению |
IGroup |
Id: stringName: string |
IMessageBody |
As<T>(bool preserveContent = false): Where T: string, byte[], JObject, JToken, JArray, XNode, XElement, XDocument — Методы context.Request.Body.As<T> считывают context.Response.Body.As<T> текст запроса или ответа в указанном типе T. -Или- AsFormUrlEncodedContent(bool preserveContent = false) — Данные context.Request.Body.AsFormUrlEncodedContent() формы, закодированные URL-адресом, и context.Response.Body.AsFormUrlEncodedContent() методы считываются в тексте сообщения запроса или ответа и возвращают IDictionary<string, IList<string> объект. Декодированные объекты поддерживают IDictionary операции и следующие выражения: ToQueryString(), JsonConvert.SerializeObject()ToFormUrlEncodedContent(). По умолчанию методы As<T> и AsFormUrlEncodedContent() методы:
Чтобы избежать этого и использовать метод, работающий с копией потока тела, задайте preserveContent для параметра значение true, как показано в примерах политики набора текста . |
IPrivateEndpointConnection |
Name: stringGroupId: stringMemberName: stringДополнительные сведения см. в разделе REST API. |
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: stringВозвращает разделенные запятыми значения параметров запроса или значение defaultValue, если параметр не найден. |
IUserIdentity |
Id: stringProvider: string |
T context.Variables.GetValueOrDefault<T>(variableName: string, defaultValue: T) |
variableName: stringdefaultValue: TВозвращает значение переменной, приведенное к типу T или defaultValue, если переменная не найдена.Этот метод выдает исключение, если указанный тип не соответствует фактическому типу возвращаемой переменной. |
BasicAuthCredentials AsBasic(input: this string) |
input: stringЕсли входной параметр содержит допустимое значение заголовка запроса авторизации для обычной проверки подлинности HTTP, метод возвращает объект типа BasicAuthCredentials; в противном случае метод возвращает значение NULL. |
bool TryParseBasic(input: this string, result: out BasicAuthCredentials) |
input: stringresult: out BasicAuthCredentialsЕсли входной параметр содержит допустимое значение заголовка запроса авторизации для обычной проверки подлинности и HTTP, метод возвращает значение true, а параметр результата содержит значение типа BasicAuthCredentials. В противном случае метод возвращает значение false. |
BasicAuthCredentials |
Password: stringUserId: string |
Jwt AsJwt(input: this string) |
input: stringЕсли входной параметр содержит допустимое значение JWT, метод возвращает объект типа Jwt; в противном случае метод возвращает.null |
bool TryParseJwt(input: this string, result: out Jwt) |
input: stringresult: out JwtЕсли входной параметр содержит допустимое значение JWT, метод возвращает true и результирующий параметр содержит значение типа Jwt; в противном случае возвращается метод 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: stringВозвращает значения утверждений, разделенные запятыми, или значение defaultValue, если заголовок не найден. |
byte[] Encrypt(input: this byte[], alg: string, key:byte[], iv:byte[]) |
input — открытый текст, который нужно зашифровать.alg — имя алгоритма симметричного шифрования.key — ключ шифрования.iv — вектор инициализации.Возвращает открытый текст в зашифрованном виде. |
byte[] Encrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm) |
input — открытый текст, который нужно зашифровать.alg — алгоритм шифрования.Возвращает открытый текст в зашифрованном виде. |
byte[] Encrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm, key:byte[], iv:byte[]) |
input — открытый текст, который нужно зашифровать.alg — алгоритм шифрования.key — ключ шифрования.iv — вектор инициализации.Возвращает открытый текст в зашифрованном виде. |
byte[] Decrypt(input: this byte[], alg: string, key:byte[], iv:byte[]) |
input — зашифрованный текст, который нужно расшифровать.alg — имя алгоритма симметричного шифрования.key — ключ шифрования.iv — вектор инициализации.Возвращает открытый текст. |
byte[] Decrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm) |
input — зашифрованный текст, который нужно расшифровать.alg — алгоритм шифрования.Возвращает открытый текст. |
byte[] Decrypt(input: this byte[], alg: System.Security.Cryptography.SymmetricAlgorithm, key:byte[], iv:byte[]) |
input — зашифрованный текст, который нужно расшифровать.alg — алгоритм шифрования.key — ключ шифрования.iv — вектор инициализации.Возвращает открытый текст. |
bool VerifyNoRevocation(input: this System.Security.Cryptography.X509Certificates.X509Certificate2) |
Выполняет проверку цепочки X.509 без проверки состояния отзыва сертификата.input — объект сертификата.Возвращает true, если проверка прошла успешно, или false, если произошел сбой проверки. |
Связанный контент
Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.
- Руководство. Преобразование и защита API
- Полный перечень операторов политик и их параметров см. в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- Репозиторий фрагментов политик
- репозиторий Policy
- Набор средств политики Управление API Azure
- Получите помощь Copilot для создания, объяснения и устранения неполадок в политике
Дополнительные сведения см. в следующих разделах:
- Способы передачи сведений о контексте во внутреннюю службу. Используйте политики настройки параметра строки запроса и настройки HTTP-заголовка, чтобы передать эти сведения.
- Использование политики проверки JWT для предварительной авторизации доступа к операциям на основе утверждений маркеров.
- Узнайте, как использовать трассировку API для определения оценки политик и результатов этих вычислений.
- Использование выражений с политиками получения из кэша и хранения в кэше для настройки кэширования ответа службы управления API. Установите такую же длительность, как и для кэширования ответа во внутренней службе, которая задается директивой
Cache-Controlна сервере. - Сведения о том, как отфильтровать содержимое. Удалите элементы данных из ответа, полученного из внутренней службы с помощью политик потока управления и задания текста.
- Чтобы скачать инструкции политики, перейдите в репозиторий GitHub api-management-samples/policies.