Skip to content

Commit 7c2b496

Browse files
Merge pull request #202 from SixLabors/js/format-utils-api
Fix method signature
2 parents b762e04 + 332af4f commit 7c2b496

File tree

4 files changed

+31
-18
lines changed

4 files changed

+31
-18
lines changed

src/ImageSharp.Web.Providers.Azure/Providers/AzureBlobStorageImageProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public async Task<IImageResolver> GetAsync(HttpContext context)
127127

128128
/// <inheritdoc/>
129129
public bool IsValidRequest(HttpContext context)
130-
=> this.formatUtilities.GetExtensionFromUri(context.Request.GetDisplayUrl()) != null;
130+
=> this.formatUtilities.TryGetExtensionFromUri(context.Request.GetDisplayUrl(), out _);
131131

132132
private bool IsMatch(HttpContext context)
133133
{

src/ImageSharp.Web/FormatUtilities.cs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,18 @@ public FormatUtilities(IOptions<ImageSharpMiddlewareOptions> options)
4747
/// Gets the file extension for the given image uri.
4848
/// </summary>
4949
/// <param name="uri">The full request uri.</param>
50-
/// <returns>The <see cref="string" />.</returns>
50+
/// <param name="extension">
51+
/// When this method returns, contains the file extension for the image source,
52+
/// if the path exists; otherwise, the default value for the type of the path parameter.
53+
/// This parameter is passed uninitialized.
54+
/// </param>
55+
/// <returns>
56+
/// <see langword="true" /> if the uri contains an extension; otherwise, <see langword="false" />.
57+
/// </returns>
5158
[MethodImpl(MethodImplOptions.AggressiveInlining)]
52-
public string GetExtensionFromUri(string uri)
59+
public bool TryGetExtensionFromUri(string uri, out string extension)
5360
{
54-
// TODO: This method should follow TryGet pattern. Fix for V2.
61+
extension = null;
5562
int query = uri.IndexOf('?');
5663
ReadOnlySpan<char> path;
5764

@@ -62,15 +69,16 @@ public string GetExtensionFromUri(string uri)
6269
{
6370
// We have a query but is it a valid one?
6471
ReadOnlySpan<char> extSpan = ext[0].AsSpan();
65-
foreach (string extension in this.extensions)
72+
foreach (string e in this.extensions)
6673
{
67-
if (extSpan.Equals(extension, StringComparison.OrdinalIgnoreCase))
74+
if (extSpan.Equals(e, StringComparison.OrdinalIgnoreCase))
6875
{
69-
return extension;
76+
extension = e;
77+
return true;
7078
}
7179
}
7280

73-
return null;
81+
return false;
7482
}
7583

7684
path = uri.AsSpan(0, query);
@@ -85,16 +93,17 @@ public string GetExtensionFromUri(string uri)
8593
{
8694
ReadOnlySpan<char> pathExtension = path.Slice(extensionIndex + 1);
8795

88-
foreach (string extension in this.extensions)
96+
foreach (string e in this.extensions)
8997
{
90-
if (pathExtension.Equals(extension, StringComparison.OrdinalIgnoreCase))
98+
if (pathExtension.Equals(e, StringComparison.OrdinalIgnoreCase))
9199
{
92-
return extension;
100+
extension = e;
101+
return true;
93102
}
94103
}
95104
}
96105

97-
return null;
106+
return false;
98107
}
99108

100109
/// <summary>

src/ImageSharp.Web/Providers/PhysicalFileSystemProvider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ public PhysicalFileSystemProvider(
5353
public Func<HttpContext, bool> Match { get; set; } = _ => true;
5454

5555
/// <inheritdoc/>
56-
public bool IsValidRequest(HttpContext context) => this.formatUtilities.GetExtensionFromUri(context.Request.GetDisplayUrl()) != null;
56+
public bool IsValidRequest(HttpContext context)
57+
=> this.formatUtilities.TryGetExtensionFromUri(context.Request.GetDisplayUrl(), out _);
5758

5859
/// <inheritdoc/>
5960
public Task<IImageResolver> GetAsync(HttpContext context)

tests/ImageSharp.Web.Tests/Helpers/FormatUtilitiesTests.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,35 +21,38 @@ public class FormatUtilitiesTests
2121
public void GetExtensionShouldMatchDefaultExtensions(string expected, string ext)
2222
{
2323
string uri = $"http://www.example.org/some/path/to/image.{ext}?width=300";
24-
Assert.Equal(expected, FormatUtilities.GetExtensionFromUri(uri));
24+
FormatUtilities.TryGetExtensionFromUri(uri, out string actual);
25+
Assert.Equal(expected, actual);
2526
}
2627

2728
[Fact]
2829
public void GetExtensionShouldNotMatchExtensionWithoutDotPrefix()
2930
{
3031
const string uri = "http://www.example.org/some/path/to/bmpimage";
31-
Assert.Null(FormatUtilities.GetExtensionFromUri(uri));
32+
Assert.False(FormatUtilities.TryGetExtensionFromUri(uri, out _));
3233
}
3334

3435
[Fact]
3536
public void GetExtensionShouldIgnoreQueryStringWithoutFormatParamter()
3637
{
3738
const string uri = "http://www.example.org/some/path/to/image.bmp?width=300&foo=.png";
38-
Assert.Equal("bmp", FormatUtilities.GetExtensionFromUri(uri));
39+
FormatUtilities.TryGetExtensionFromUri(uri, out string actual);
40+
Assert.Equal("bmp", actual);
3941
}
4042

4143
[Fact]
4244
public void GetExtensionShouldAcknowledgeQueryStringFormatParameter()
4345
{
4446
const string uri = "http://www.example.org/some/path/to/image.bmp?width=300&format=png";
45-
Assert.Equal("png", FormatUtilities.GetExtensionFromUri(uri));
47+
FormatUtilities.TryGetExtensionFromUri(uri, out string actual);
48+
Assert.Equal("png", actual);
4649
}
4750

4851
[Fact]
4952
public void GetExtensionShouldRejectInvalidQueryStringFormatParameter()
5053
{
5154
const string uri = "http://www.example.org/some/path/to/image.bmp?width=300&format=invalid";
52-
Assert.Null(FormatUtilities.GetExtensionFromUri(uri));
55+
Assert.False(FormatUtilities.TryGetExtensionFromUri(uri, out _));
5356
}
5457
}
5558
}

0 commit comments

Comments
 (0)