繁体   English   中英

Asp.Net Core 3.1 Web 应用程序,未找到 Api 页面问题

[英]Asp.Net Core 3.1 Web Application, Api page not found issue

我的环境 Windows 10。Visual Studio 2019 Professional,Asp.Net Core 3.1

我正在学习 Pluralsight 课程来自学 Asp.Net Core 3.1。 跟随讲师,我创建了 Web 应用程序。 一切顺利,直到讲师向应用程序添加 api 控制器。 这对他有效,但对我无效。

这是我的 api 控制器

namespace OdeToFood.Api
{
    [Route("api/[controller]")]
    [ApiController]
    public class RestaurantsController : ControllerBase
    {
        private readonly OdeToFoodDbContext _context;

        public RestaurantsController(OdeToFoodDbContext context)
        {
            _context = context;
        }

        // GET: api/Restaurants
        [HttpGet]
        public async Task<ActionResult<IEnumerable<Restaurant>>> GetRestaurants()
        {
            return await _context.Restaurants.ToListAsync();
        }

        // GET: api/Restaurants/5
        [HttpGet("{id}")]
        public async Task<ActionResult<Restaurant>> GetRestaurant(int id)
        {
            var restaurant = await _context.Restaurants.FindAsync(id);

            if (restaurant == null)
            {
                return NotFound();
            }

            return restaurant;
        }

. . . . .

这是我的项目结构和层次结构。 在此处输入图片说明

当我重建我的项目,并从本地 IIS Express 调用应用程序时,即 https://localhost:44351/ 它加载正常。 我可以完全交互,浏览和 CRUD 实体。 但是,当我指向任何 api url,例如 https://localhost:44351/api/Restaurants 或 https://localhost:44351/api/Restaurants/2 时,我得到“无法找到此本地主机页面”。 api 根本不加载或以任何方式响应。

我熟悉 MVC5,其中在创建新项目时,在创建项目向导脚手架中,您可以选中一个框以添加 api 功能。 我在 VS2019 for Asp.Net Core 3.1 We Apps 中没有看到这一点。

我保证你在这里问这个问题之前已经做完了我的功课。 我已经谷歌搜索死了。 我看过关于核心 3.1 重大更改的 MS 文章。 我看过在线项目模板。 我已经搜索过stackoverflow。 也许我的搜索词有缺陷,我只是缺少一些简单的东西。

问题:

  1. 为什么上面显示的api没有加载?

  2. 有没有办法将 api 功能添加到现有的 Asp.Net Core 3.1 Web 应用程序中,还是我需要创建一个单独的 api 项目?

  3. 有没有办法创建一个包含 api 功能的新 Asp.Net Core 3.1 Web 应用程序?

我提前致谢

基兰

如果您想将 Web API 功能添加到现有的 Razor Pages 项目中,您需要进行额外的配置,如下所示。

public void ConfigureServices(IServiceCollection services)
{
    //add services for controllers
    services.AddControllers();

    services.AddRazorPages();

    //...
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //...

    app.UseRouting();

    //...

    app.UseEndpoints(endpoints =>
    {
        //add endpoints for controller actions
        endpoints.MapControllers();

        endpoints.MapRazorPages();
    });
}

控制器和动作的测试代码

[Route("api/[controller]")]
[ApiController]
public class RestaurantsController : ControllerBase
{
    public IActionResult GetRestaurants()
    {
        return Ok("Restaurants List Here");
    }
}

测试结果

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM