Postman在请求简单的ASP.NET Core Web API时出现404错误。

6
我已经创建了一个非常简单的ASP.NET Core 2.1 Web API项目,并创建了一个使用EF Core获取实体的简单控制器。但是,当尝试使用Postman访问GetEntities方法时,响应是404错误。我在以下URL上使用HTTP GET方法:https://localhost:44311/api/entities。响应正文包含消息<pre>Cannot GET /api/entities</pre>。为什么Postman针对此路由收到404错误呢?请看下面的EntitiesController.cs文件。
namespace MyProject.Controllers
{
    [Route("api/controller")]
    public class EntitiesController : Controller
    {
        private readonly ApplicationDbContext dbContext;

        public EntitiesController(ApplicationDbContext _dbContext)
        {
            this.dbContext = _dbContext;
        }

        [HttpGet]
        public IActionResult GetEntities()
        {
            var result = dbContext.Entities.ToListAsync();
            return Ok(result);
        }
    }
}
3个回答

10

为什么Postman在访问此路由时会收到404错误?

问题出在控制器模板中的控制器标记[controller]丢失,这导致路由被硬编码为api/controller

这意味着当请求api/entities时,它在技术上不存在,因此在请求时返回404 Not Found

请更新控制器中的路由模板。

[Route("api/[controller]")]
public class EntitiesController : Controller {
    private readonly ApplicationDbContext dbContext;

    public EntitiesController(ApplicationDbContext _dbContext) {
        this.dbContext = _dbContext;
    }

    //GET api/entities
    [HttpGet]
    public async Task<IActionResult> GetEntities() {
        var result = await dbContext.Entities.ToListAsync();
        return Ok(result);
    }
}

参考ASP.NET Core中的控制器操作路由:路由模板中的令牌替换([controller]、[action]、[area])


6
你的路由是“api/controller”,而不是“api/entities”。你需要在“controller”周围加上方括号,以获得所需的效果 - "api/[controller]"

0
请确保控制器文件名和类名正确,应该以单词“Controller”为后缀,例如:UsersController.cs。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接