邮递员针对简单的ASP.NET Core Web API遇到404错误

时间:2018-07-21 23:50:54

标签: c# http asp.net-core postman

我建立了一个非常简单的ASP.NET Core 2.1 Web API项目,并创建了以下简单的控制器,该控制器使用EF Core来获取实体。

问题是,当尝试使用邮递员访问GetEntities方法时,响应为404错误。我在以下网址上使用了HTTP GET方法。

https://localhost:44311/api/entities

响应正文包含消息<pre>Cannot GET /api/entities</pre>

为什么邮递员在此路线上收到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 个答案:

答案 0 :(得分:7)

  

为什么邮递员在此路线上收到404错误?

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

这意味着在请求 api / entities 时,它在技术上不存在,因此在请求时 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);
    }
}

引用Routing to controller actions in ASP.NET Core : Token replacement in route templates ([controller], [action], [area])

答案 1 :(得分:2)

您的路线是“ api / controller”,请注意“ api / entities”。您需要在“控制器”周围放置方括号才能获得预期的效果-"api/[controller]"

答案 2 :(得分:0)

确保控制器文件名和类名正确,应使用单词“ Controller”作为后缀,例如UsersController.cs