簡體   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