Пример #1
0
        /// <summary>
        /// Formats the token as a string
        /// </summary>
        public string Format(Token token, object value = null)
        {
            switch (token.Type)
            {
            case TokenType.String:
                return(token.Value);

            case TokenType.Parameter:
                if (value == null && _parameters == null)
                {
                    return(string.Empty);
                }

                if (value == null && token.Position < _parameters.Length)
                {
                    value = _parameters[token.Position];
                    value = FormatterEntry.FormatParameter(value);
                }

                if (token.NativeFormat != null)
                {
                    return(string.Format(token.NativeFormat, value));
                }
                else
                {
                    return(value == null ? string.Empty : value.ToString());
                }
            }

            return(string.Empty);
        }
    public static async ValueTask StoreAsync(string key, OutputCacheEntry value, TimeSpan duration, IOutputCacheStore store, CancellationToken cancellationToken)
    {
        ArgumentNullException.ThrowIfNull(value);
        ArgumentNullException.ThrowIfNull(value.Body);
        ArgumentNullException.ThrowIfNull(value.Headers);

        var formatterEntry = new FormatterEntry
        {
            StatusCode = value.StatusCode,
            Created    = value.Created,
            Tags       = value.Tags,
            Body       = value.Body.Segments
        };

        if (value.Headers != null)
        {
            formatterEntry.Headers = new();
            foreach (var header in value.Headers)
            {
                formatterEntry.Headers.TryAdd(header.Key, header.Value.ToArray());
            }
        }

        using var bufferStream = new MemoryStream();

        JsonSerializer.Serialize(bufferStream, formatterEntry, FormatterEntrySerializerContext.Default.FormatterEntry);

        await store.SetAsync(key, bufferStream.ToArray(), value.Tags ?? Array.Empty <string>(), duration, cancellationToken);
    }