Do not throw a null reference from request.GetDisplayUrl() (#1057)
This commit is contained in:
parent
ec176b2e40
commit
187e89f6f0
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue