ASP.NET Core WebAPI 404错误

20

我在asp.net core中创建了一个Web Api,这是Api的内容:

 [Route("api/[controller]")]
public class BlogController : Controller
{

    public IContext _context { get; set; }
    public BlogController(IContext ctx)
    {
        _context = ctx;
    }

    [HttpGet]
    [Route("api/Blog/GetAllBlog")]
    public List<Blog> GetAllBlog()
    {
        return _context.Blogs.ToList();
    }


   }
据我所知,在ASP.NET Core(WebApi模板)中,我们不需要像在Asp.net Mvc 5.3及更早版本中需要的注册路由等任何配置。
因此,当我尝试通过浏览器或Postman调用GetAllBlog,使用该URL http://localhost:14742/api/Blog/GetAllBlog时,它会出现404错误,这是什么问题?
1个回答

27

您已经在控制器类的顶部包含了api/[controller]路由,因此在定义访问方法的路由时不需要再次包含它。 实质上,将路由更改为api/Blog/GetAllBlog,以便于获取所有博客。您的代码应该像这样:

[Route("api/[controller]")]
public class BlogController : Controller
{

    public IContext _context { get; set; }
    public BlogController(IContext ctx)
    {
        _context = ctx;
    }

    [HttpGet]
    [Route("GetAllBlog")]
    public List<Blog> GetAllBlog()
    {
        return _context.Blogs.ToList();
    }

    [HttpGet]
    [Route("GetOldBlogs")]
    public List<Blog> GetOldBlogs()
    {
        return _context.Blogs.Where(x => x.CreationDate <= DateTime.Now.AddYears(-2)).ToList();
    }
}

你还需要为方法拥有不同的路由名称。 希望这可以帮到你。


3
是否可以不使用[Route]属性,隐式地为路由指定名称?即使没有该属性,是否仍然可以创建命名路由? - kickinchicken

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