c# - 为什么未指定操作名称时不调用索引方法

标签 c# .net-core asp.net-core-webapi

我有一个简单的 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/

相关文章:

asp.net-core-webapi - 有没有办法在每个 HTTP 请求的 JSON 响应中重置 $id? JsonSerializerSettings = PreserveReferencesHandling.Objects

c# - 返回一个 List<String> 以便调用者不能修改它

c# - 如何将字符串从编码代码转换为字符?

c# - 如何将数据插入 Microsoft Access 数据库?

c# - 无法在 C# 代码中将 Azure 云存储帐户的公共(public)文件 URL 过期时间设置为超过 1 年

asp.net-core - Asp.net Core 模型绑定(bind)器接受 bool 类型的随机整数

c# - 如何使用正则表达式匹配路由部分的部分url? WebAPI .NET 核心 2.2

c# - 我让 C DLL 从 C# 向 c DLL 发送参数

c# - 仅适用于 Xamarin 的可移植类库吗?

c# - 通过 .NET Core 上的 MEF 将参数传递给插件构造函数?