/// <summary>
        /// Gets the current OData API versioning request properties.
        /// </summary>
        /// <param name="request">The <see cref="HttpRequestMessage">request</see> to get the OData API versioning properties for.</param>
        /// <returns>The current <see cref="ODataApiVersionRequestProperties">OData API versioning properties</see>.</returns>
        public static ODataApiVersionRequestProperties ODataApiVersionProperties(this HttpRequestMessage request)
        {
            Arg.NotNull(request, nameof(request));
            Contract.Ensures(Contract.Result <ODataApiVersionRequestProperties>() != null);

            if (!request.Properties.TryGetValue(ODataApiVersionPropertiesKey, out var value) || !(value is ODataApiVersionRequestProperties properties))
            {
                request.Properties[ODataApiVersionPropertiesKey] = properties = new ODataApiVersionRequestProperties();
            }

            return(properties);
        }
        /// <summary>
        /// Gets the current OData API versioning request properties.
        /// </summary>
        /// <param name="request">The <see cref="HttpRequestMessage">request</see> to get the OData API versioning properties for.</param>
        /// <returns>The current <see cref="ODataApiVersionRequestProperties">OData API versioning properties</see>.</returns>
        public static ODataApiVersionRequestProperties ODataApiVersionProperties(this HttpRequestMessage request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (!request.Properties.TryGetValue(ODataApiVersionPropertiesKey, out var value) || !(value is ODataApiVersionRequestProperties properties))
            {
                request.Properties[ODataApiVersionPropertiesKey] = properties = new ODataApiVersionRequestProperties();
            }

            return(properties);
        }