我正在使用 ASP.NET Web API。有一个用户控制器具有以下两种方法。
[HttpGet("{firstName}")]
public List<string> GetByFirstNameContains(string firstName)
{
return new List<string>()
{
"F1", "F2", "F3"
};
}
[HttpGet("{lastName}")]
public List<string> GetByLastNameContains(string lastName)
{
return new List<string>()
{
"L1", "L2", "L3"
};
}
产生以下错误:
Microsoft.AspNetCore.Routing.Matching.AmbigouslyMatchException:请求匹配多个终结点。比赛:
GettingStartedAPI.Controllers.UsersController.GetByFirstNameContains(GettingStartedAPI) GettingStartedAPI.Controllers.UsersController.Get (GettingStartedAPI) GettingStartedAPI.Controllers.UsersController.GetByLastNameContains (GettingStartedAPI) 在 Microsoft.AspNetCore.Routing.Matching.DefaultEndpointSelector.ReportAmbiguity(Span
1 candidateState) at Microsoft.AspNetCore.Routing.Matching.DefaultEndpointSelector.ProcessFinalCandidates(HttpContext httpContext, Span
1候选状态)
在 Microsoft.AspNetCore.Routing.Matching.DefaultEndpointSelector.Select(HttpContext httpContext,Span`1候选状态)
在 Microsoft.AspNetCore.Routing.Matching.DfaMatcher.MatchAsync(HttpContext httpContext)
在 Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext)
在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext 上下文)
有没有办法在同一个控制器中拥有多个方法来按不同字段进行搜索?
这也失败了:
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
[HttpGet("{lastName}")]
public List<string> ArgleBargle(string lastName)
{
return new List<string>()
{
"L1", "L2", "L3"
};
}
Microsoft.AspNetCore.Routing.Matching.AmbigouslyMatchException:请求匹配多个终结点。比赛:
GettingStartedAPI.Controllers.UsersController.Get(GettingStartedAPI) GettingStartedAPI.Controllers.UsersController.ArgleBargle (入门API)
我构建了下面这个可怕的怪物,这是可行的。显然,必须有更好的方法。任何帮助将不胜感激。
[HttpGet("{field},{value}")]
public dynamic Get(UserNameFields field, string value)
{
if (field == UserNameFields.FirstName)
{
return new List<string>()
{
"F1", "F2", "F3"
};
}
else if (field == UserNameFields.ID)
{
return "value";
}
else
{
return new List<string>()
{
"L1", "L2", "L3"
};
}
}
您收到 Asp.Net Core AmbigouslyMatchException 异常,因为您为两个函数定义的路由模式使用相同的路由模式 [HttpGet("{parameter}")],当您发送请求时,它将无法确定哪个方法打电话。我建议你区分路线。对于方法“GetByFirstNameContains”,您可以使用 [HttpGet("userbyfirstname/{firstName}")] 和 [HttpGet("userbylastname/{lastName}")] 作为第二种方法。
我希望这有帮助