Do not throw a null reference from request.GetDisplayUrl() (#1057)

This commit is contained in:
Filip W 2018-10-30 20:32:26 +01:00 committed by Chris Ross
parent ec176b2e40
commit 187e89f6f0
2 changed files with 13 additions and 10 deletions

View File

@ -195,17 +195,18 @@ namespace Microsoft.AspNetCore.Http.Extensions
/// <returns></returns> /// <returns></returns>
public static string GetDisplayUrl(this HttpRequest request) public static string GetDisplayUrl(this HttpRequest request)
{ {
var host = request.Host.Value; var scheme = request.Scheme ?? string.Empty;
var pathBase = request.PathBase.Value; var host = request.Host.Value ?? string.Empty;
var path = request.Path.Value; var pathBase = request.PathBase.Value ?? string.Empty;
var queryString = request.QueryString.Value; var path = request.Path.Value ?? string.Empty;
var queryString = request.QueryString.Value ?? string.Empty;
// PERF: Calculate string length to allocate correct buffer size for StringBuilder. // PERF: Calculate string length to allocate correct buffer size for StringBuilder.
var length = request.Scheme.Length + SchemeDelimiter.Length + host.Length var length = scheme.Length + SchemeDelimiter.Length + host.Length
+ pathBase.Length + path.Length + queryString.Length; + pathBase.Length + path.Length + queryString.Length;
return new StringBuilder(length) return new StringBuilder(length)
.Append(request.Scheme) .Append(scheme)
.Append(SchemeDelimiter) .Append(SchemeDelimiter)
.Append(host) .Append(host)
.Append(pathBase) .Append(pathBase)

View File

@ -55,17 +55,19 @@ namespace Microsoft.AspNetCore.Http.Extensions
Assert.Equal("http://my.xn--host-cpd:80/un%3Fescaped/base/un%3Fescaped?name=val%23ue", request.GetEncodedUrl()); Assert.Equal("http://my.xn--host-cpd:80/un%3Fescaped/base/un%3Fescaped?name=val%23ue", request.GetEncodedUrl());
} }
[Fact] [Theory]
public void GetDisplayUrlFromRequest() [InlineData("/un?escaped/base")]
[InlineData(null)]
public void GetDisplayUrlFromRequest(string pathBase)
{ {
var request = new DefaultHttpContext().Request; var request = new DefaultHttpContext().Request;
request.Scheme = "http"; request.Scheme = "http";
request.Host = new HostString("my.HoΨst:80"); request.Host = new HostString("my.HoΨst:80");
request.PathBase = new PathString("/un?escaped/base"); request.PathBase = new PathString(pathBase);
request.Path = new PathString("/un?escaped"); request.Path = new PathString("/un?escaped");
request.QueryString = new QueryString("?name=val%23ue"); request.QueryString = new QueryString("?name=val%23ue");
Assert.Equal("http://my.hoψst:80/un?escaped/base/un?escaped?name=val%23ue", request.GetDisplayUrl()); Assert.Equal("http://my.hoψst:80" + pathBase + "/un?escaped?name=val%23ue", request.GetDisplayUrl());
} }
[Theory] [Theory]