邮差为简单的ASP.NET Core Web API收到404错误

cra*_*den 4 c# http postman asp.net-core

我已经设置了一个非常简单的ASP.NET Core 2.1 Web API项目,并创建了以下简单的控制器,它使用EF Core获取entites.

问题是,当尝试使用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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Nko*_*osi 7

为什么Postman收到这条路线的404错误?

问题是控制器上[controller]的路由模板中缺少控制器令牌,导致路由被硬编码api/controller.

这意味着在请求api /实体时,它在技术上不存在,因此在请求时找不到404.

更新控制器上的路由模板.

[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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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


SBF*_*ies 5

您的路线是“api/controller”,而不是“api/entities”。您需要在“控制器”周围放置方括号以获得所需的效果 - "api/[controller]"