Files
WireMock.Net/WEBSOCKET_STRING_EXTENSION.md
Stef Heyenrath 26354641a1 ws2
2026-02-08 11:47:08 +01:00

2.6 KiB

String Extension for .NET 4.6.1 Compatibility

Problem

The Contains(string, StringComparison) method was added in .NET 5.0. For .NET Framework 4.6.1 and .NET Standard 2.1 targets, this method is not available.

Solution

Created StringExtensions.cs with a ContainsIgnoreCase extension method that provides a compatibility shim.

Implementation Details

File Location: src/WireMock.Net.WebSockets/StringExtensions/StringExtensions.cs

Namespace: WireMock.WebSockets

internal static class StringExtensions
{
#if NET5_0_OR_GREATER
    // Uses native .NET 5+ Contains method
    internal static bool ContainsIgnoreCase(this string value, string substring, StringComparison comparisonType)
    {
        return value.Contains(substring, comparisonType);
    }
#else
    // For .NET Framework 4.6.1 and .NET Standard 2.1
    // Uses IndexOf with StringComparison for compatibility
    internal static bool ContainsIgnoreCase(this string value, string substring, StringComparison comparisonType)
    {
        // Implementation using IndexOf
        return value.IndexOf(substring, comparisonType) >= 0;
    }
#endif
}

Usage in WebSocketRequestMatcher

// Before: Not available in .NET 4.6.1
v.Contains("Upgrade", StringComparison.OrdinalIgnoreCase)

// After: Works in all target frameworks
v.ContainsIgnoreCase("Upgrade", StringComparison.OrdinalIgnoreCase)

Target Frameworks Supported

Framework Method Used
.NET 5.0+ Native Contains(string, StringComparison)
.NET Framework 4.6.1 IndexOf(string, StringComparison) >= 0 compat shim
.NET Standard 2.1 IndexOf(string, StringComparison) >= 0 compat shim
.NET 6.0+ Native Contains(string, StringComparison)
.NET 8.0 Native Contains(string, StringComparison)

Benefits

Cross-platform compatibility - Works across all target frameworks
Performance optimized - Uses native method on .NET 5.0+
Zero overhead - Extension method with conditional compilation
Clean API - Same method name across all frameworks
Proper null handling - Includes ArgumentNullException checks

Conditional Compilation

The extension uses #if NET5_0_OR_GREATER to conditionally compile:

  • For .NET 5.0+: Delegates directly to the native Contains method
  • For .NET 4.6.1 and .NET Standard 2.1: Uses IndexOf for equivalent functionality

This ensures maximum performance on newer frameworks while maintaining compatibility with older ones.


Status: Implemented and tested
Compilation: No errors
All frameworks: Supported