diff --git a/src/ByteBard.AsyncAPI.Readers/Services/DefaultStreamLoader.cs b/src/ByteBard.AsyncAPI.Readers/Services/DefaultStreamLoader.cs index 6ccd69b..e753d0c 100644 --- a/src/ByteBard.AsyncAPI.Readers/Services/DefaultStreamLoader.cs +++ b/src/ByteBard.AsyncAPI.Readers/Services/DefaultStreamLoader.cs @@ -15,20 +15,27 @@ public Stream Load(Uri uri) { try { - switch (uri.Scheme) + if (uri.IsAbsoluteUri) { - case "file": - return File.OpenRead(uri.AbsolutePath); - case "http": - case "https": - return HttpClient.GetStreamAsync(uri).GetAwaiter().GetResult(); - default: - throw new ArgumentException("Unsupported scheme"); + switch (uri.Scheme.ToLowerInvariant()) + { + case "file": + return File.OpenRead(uri.LocalPath); + case "http": + case "https": + return HttpClient.GetStreamAsync(uri).GetAwaiter().GetResult(); + default: + throw new ArgumentException("Unsupported scheme"); + } + } + else + { + return File.OpenRead(uri.OriginalString); } } catch (Exception ex) { - throw new AsyncApiReaderException($"Something went wrong trying to fetch '{uri.OriginalString}. {ex.Message}'", ex); + throw new AsyncApiReaderException($"Something went wrong trying to fetch '{uri.OriginalString}'. {ex.Message}", ex); } } @@ -36,15 +43,22 @@ public async Task LoadAsync(Uri uri) { try { - switch (uri.Scheme) + if (uri.IsAbsoluteUri) + { + switch (uri.Scheme.ToLowerInvariant()) + { + case "file": + return File.OpenRead(uri.LocalPath); + case "http": + case "https": + return await HttpClient.GetStreamAsync(uri); + default: + throw new ArgumentException("Unsupported scheme"); + } + } + else { - case "file": - return File.OpenRead(uri.AbsolutePath); - case "http": - case "https": - return await HttpClient.GetStreamAsync(uri); - default: - throw new ArgumentException("Unsupported scheme"); + return File.OpenRead(uri.OriginalString); } } catch (Exception ex) @@ -53,4 +67,4 @@ public async Task LoadAsync(Uri uri) } } } -} \ No newline at end of file +}