diff --git a/RestSharp.Tests/UrlBuilderTests.cs b/RestSharp.Tests/UrlBuilderTests.cs index a94fef44c..5ea30cd22 100644 --- a/RestSharp.Tests/UrlBuilderTests.cs +++ b/RestSharp.Tests/UrlBuilderTests.cs @@ -125,6 +125,17 @@ public void GET_with_resource_containing_tokens() Assert.Equal(expected, output); } + [Fact] + public void GET_with_resource_containing_null_token() + { + var request = new RestRequest("/resource/{foo}", Method.GET); + request.AddUrlSegment("foo", null); + var client = new RestClient("http://example.com/api/1.0"); + + var exception = Assert.Throws(() => client.BuildUri(request)); + Assert.Contains("foo", exception.Message); + } + [Fact] public void POST_with_resource_containing_tokens() { diff --git a/RestSharp/RestClient.cs b/RestSharp/RestClient.cs index 82a990f2b..94f669411 100644 --- a/RestSharp/RestClient.cs +++ b/RestSharp/RestClient.cs @@ -248,6 +248,11 @@ public Uri BuildUri(IRestRequest request) var urlParms = request.Parameters.Where(p => p.Type == ParameterType.UrlSegment); foreach (var p in urlParms) { + if (p.Value == null) + { + throw new ArgumentException(string.Format("Cannot build uri when url segment parameter '{0}' value is null.", p.Name), "request"); + } + assembled = assembled.Replace("{" + p.Name + "}", p.Value.ToString().UrlEncode()); }