private static bool ETagsMatch( ETag eTag, string eTagToCompare, bool useStrongComparisonFunction) { // for If-None-Match (cache) checks, weak comparison should be used. // for If-Match (concurrency) check, strong comparison should be used. //The example below shows the results for a set of entity-tag pairs and //both the weak and strong comparison function results: //+--------+--------+-------------------+-----------------+ //| ETag 1 | ETag 2 | Strong Comparison | Weak Comparison | //+--------+--------+-------------------+-----------------+ //| W/"1" | W/"1" | no match | match | //| W/"1" | W/"2" | no match | no match | //| W/"1" | "1" | no match | match | //| "1" | "1" | match | match | //+--------+--------+-------------------+-----------------+ if (useStrongComparisonFunction) { // to match, both eTags must be strong & be an exact match. var eTagToCompareIsStrong = !eTagToCompare.StartsWith("W/"); return(eTagToCompareIsStrong && eTag.ETagType == ETagType.Strong && string.Equals(eTag.ToString(), eTagToCompare, StringComparison.OrdinalIgnoreCase)); } // for weak comparison, we only compare the parts of the eTags after the "W/" var firstValueToCompare = eTag.ETagType == ETagType.Weak ? eTag.ToString()[2..] : eTag.ToString();