Skip to content

Commit d6c2433

Browse files
committed
fix #1980 GetAsync fails when specifying a null index.
```csharp var response = await elasticClient.GetAsync<T>(id, s => s.Index(null)); ``` Would not default index back to inferred type of T. This PR makes specifying null for required route values a noop For optional routevalues null still clears the routevalue so the following still works ```csharp c => c.Index(project, i => i.Id(null)) ``` will reset the id on and send the index request to `/inferredindex/inferredtype`
1 parent cde85b4 commit d6c2433

File tree

5 files changed

+87
-74
lines changed

5 files changed

+87
-74
lines changed

Diff for: src/CodeGeneration/CodeGeneration.LowLevelClient/Domain/CsharpMethod.cs

+5-3
Original file line numberDiff line numberDiff line change
@@ -240,16 +240,18 @@ public IEnumerable<FluentRouteSetter> GetFluentRouteSetters()
240240
paramName = paramName.ToLowerInvariant();
241241

242242
var routeValue = paramName;
243+
var routeSetter = p.Required ? "Required" : "Optional";
244+
243245
if (paramName == "metric") routeValue = "(Metrics)metric";
244246
else if (paramName == "indexMetric") routeValue = "(IndexMetrics)indexMetric";
245247

246-
var code = $"public {returnType} {p.InterfaceName}({ClrParamType(p.ClrTypeName)} {paramName}) => Assign(a=>a.RouteValues.Optional(\"{p.Name}\", {routeValue}));";
248+
var code = $"public {returnType} {p.InterfaceName}({ClrParamType(p.ClrTypeName)} {paramName}) => Assign(a=>a.RouteValues.{routeSetter}(\"{p.Name}\", {routeValue}));";
247249
var xmlDoc = $"///<summary>{p.Description}</summary>";
248250
setters.Add(new FluentRouteSetter { Code = code, XmlDoc = xmlDoc });
249251
if (paramName == "index" || paramName == "type")
250252
{
251253
code = $"public {returnType} {p.InterfaceName}<TOther>() where TOther : class ";
252-
code += $"=> Assign(a=>a.RouteValues.Optional(\"{p.Name}\", ({p.ClrTypeName})typeof(TOther)));";
254+
code += $"=> Assign(a=>a.RouteValues.{routeSetter}(\"{p.Name}\", ({p.ClrTypeName})typeof(TOther)));";
253255
xmlDoc = $"///<summary>{p.Description}</summary>";
254256
setters.Add(new FluentRouteSetter { Code = code, XmlDoc = xmlDoc });
255257
}
@@ -268,7 +270,7 @@ public IEnumerable<FluentRouteSetter> GetFluentRouteSetters()
268270
if (paramName == "fields" && p.Type == "list")
269271
{
270272
code = $"public {returnType} Fields<T>(params Expression<Func<T, object>>[] fields) ";
271-
code += "=> Assign(a => a.RouteValues.Optional(\"fields\", (Fields)fields));";
273+
code += $"=> Assign(a => a.RouteValues.{routeSetter}(\"fields\", (Fields)fields));";
272274
xmlDoc = $"///<summary>{p.Description}</summary>";
273275
setters.Add(new FluentRouteSetter { Code = code, XmlDoc = xmlDoc });
274276
}

Diff for: src/Nest/CommonAbstractions/Infer/DocumentPath/DocumentPath.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,15 @@ public DocumentPath(Id id)
3737

3838
public DocumentPath<T> Index(IndexName index)
3939
{
40+
if (index == null) return this;
4041
Self.Index = index;
4142
return this;
4243
}
4344
public DocumentPath<T> Type(TypeName type)
4445
{
46+
if (type == null) return this;
4547
Self.Type = type;
4648
return this;
4749
}
4850
}
49-
}
51+
}

Diff for: src/Nest/CommonAbstractions/Request/RouteValues.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,13 @@ private string GetResolved(string route)
3535

3636
private RouteValues Route(string name, IUrlParameter routeValue, bool required = true)
3737
{
38-
if (routeValue == null)
38+
if (routeValue == null && !required)
3939
{
4040
if (this._routeValues.ContainsKey(name))
4141
this._routeValues.Remove(name);
4242
return this;
4343
}
44+
else if (routeValue == null) return this;
4445

4546
this._routeValues[name] = routeValue;
4647
return this;

0 commit comments

Comments
 (0)