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>
public static string GetDisplayUrl(this HttpRequest request)
{
var host = request.Host.Value;
var pathBase = request.PathBase.Value;
var path = request.Path.Value;
var queryString = request.QueryString.Value;
var scheme = request.Scheme ?? string.Empty;
var host = request.Host.Value ?? string.Empty;
var pathBase = request.PathBase.Value ?? string.Empty;
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.
var length = request.Scheme.Length + SchemeDelimiter.Length + host.Length
var length = scheme.Length + SchemeDelimiter.Length + host.Length
+ pathBase.Length + path.Length + queryString.Length;
return new StringBuilder(length)
.Append(request.Scheme)
.Append(scheme)
.Append(SchemeDelimiter)
.Append(host)
.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());
}
[Fact]
public void GetDisplayUrlFromRequest()
[Theory]
[InlineData("/un?escaped/base")]
[InlineData(null)]
public void GetDisplayUrlFromRequest(string pathBase)
{
var request = new DefaultHttpContext().Request;
request.Scheme = "http";
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.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]