我有一个简单的 ASP.NET Core API 和以下 Controller :
[ApiController]
[Route("api/[controller]")]
public class HomeController : ControllerBase
{
public IActionResult Index()
{
return Ok("index");
}
public IActionResult Get()
{
return Ok("get");
}
}
当我点击 URL 时:
"http://localhost:6001/api/home"
使用 GET
请求时,我收到以下错误:
"The request matched multiple endpoints."
通常情况下,如果我不指定操作名称,它不应该调用 Index()
方法吗?
最佳答案
在 ASP.NET Core API 中,操作方法由用作方法属性的 HTTP 动词(如果不添加任何动词,默认为 HttpGet
)和路由的组合来匹配与它一起使用的参数。从这个意义上说,您的操作方法看起来与路由系统相似。它看到两个没有路由参数的 HttpGet
方法。这就是为什么这两种方法都匹配请求 -
"http://localhost:6001/api/home"
使路由系统困惑于选择哪个。这正是错误消息所说的内容。
您需要使您的非默认操作方法更加具体,以便路由机制可以区分两者。类似的东西 -
[HttpGet("data")]
public IActionResult Get()
{
return Ok("get");
}
现在,您的 Index
方法将作为默认操作方法与上述 URL 进行匹配。
关于c# - 为什么未指定操作名称时不调用索引方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63984350/