You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Elastic.Clients.Elasticsearch 8.9.3调用CreateAsync创建文档遇路由异常

问题描述

使用.NET平台的Elastic.Clients.Elasticsearch 8.9.3库中的ElasticsearchClient,尝试通过以下代码创建新文档:

var createRequest = new CreateRequest<MyModelDto>("myindex", Id.From(dto))
{
    Document = dto
};
await _client.CreateAsync(createRequest);

执行时抛出如下异常:

System.Exception: No route taking 1 parameters{index}/create/{id}

at Elastic.Clients.Elasticsearch.Requests.ApiUrls.Resolve(RouteValues routeValues, IElasticsearchClientSettings settings) in /
/src/Elastic.Clients.Elasticsearch/Core/Request/ApiUrls.cs:line 68

at Elastic.Clients.Elasticsearch.Requests.Request.ResolveUrl(RouteValues routeValues, IElasticsearchClientSettings settings) in //src/Elastic.Clients.Elasticsearch/Core/Request/Request.cs:line 52

at Elastic.Clients.Elasticsearch.Requests.Request.GetUrl(IElasticsearchClientSettings settings) in /
/src/Elastic.Clients.Elasticsearch/Core/Request/Request.cs:line 56

at Elastic.Clients.Elasticsearch.ElasticsearchClient.PrepareRequest[TRequest,TRequestParameters](TRequest request, Action1 forceConfiguration) in /_/src/Elastic.Clients.Elasticsearch/Client/ElasticsearchClient.cs:line 279<br /> at Elastic.Clients.Elasticsearch.ElasticsearchClient.DoRequestAsync[TRequest,TResponse,TRequestParameters](TRequest request, Action1 forceConfiguration, CancellationToken cancellationToken) in //src/Elastic.Clients.Elasticsearch/Client/ElasticsearchClient.cs:line 221

at Elastic.Clients.Elasticsearch.ElasticsearchClient.DoRequestAsync[TRequest,TResponse,TRequestParameters](TRequest request, CancellationToken cancellationToken) in /
/src/Elastic.Clients.Elasticsearch/Client/ElasticsearchClient.cs:line 179

at Elastic.Clients.Elasticsearch.ElasticsearchClient.CreateAsync[TDocument](CreateRequest`1 request, CancellationToken cancellationToken) in /_/src/Elastic.Clients.Elasticsearch/_Generated/Client/ElasticsearchClient.g.cs:line 483

问题原因及解决方法
  • 核心问题是Id.From(dto)未能从MyModelDto实例中解析出有效的非空ID值,导致请求路由中缺失{id}参数,触发路由匹配失败。
  • 检查MyModelDto的ID配置:确保类中存在被标记为Elasticsearch文档ID的属性(比如使用[PropertyName("_id")]特性标注,或通过客户端设置映射规则),保证Id.From(dto)能正确提取ID。
  • 直接传入明确ID值:如果Dto自身有Id属性,可改为直接传入该属性值,示例代码如下:
var createRequest = new CreateRequest<MyModelDto>("myindex", dto.Id.ToString())
{
    Document = dto
};
await _client.CreateAsync(createRequest);

内容的提问来源于stack exchange,提问作者SimonD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:25:12