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>
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
Loading…
Reference in New Issue