Blazor Server项目集成ASP.NET Core 7 Web API无法访问求助
Blazor Server集成ASP.NET Core 7 Web API出现404错误的修复方案
问题描述
在Blazor Server应用中集成ASP.NET Core 7 Web API时,访问地址https://localhost:44322/api/GetWeatherForecast出现404错误,页面显示:
Sorry, there's nothing at this address.
错误原因
API控制器混用了旧版ASP.NET Web API的路由特性(System.Web.Http.Route)和ASP.NET Core MVC特性,导致路由无法正确匹配;同时API控制器继承了面向MVC视图的Controller基类,不符合API控制器的最佳实践。
修复步骤
1. 清理旧命名空间引用
移除控制器中属于传统ASP.NET Web API的命名空间,它不适用于ASP.NET Core:
// 删除此行 using System.Web.Http;
2. 修正控制器路由与基类
替换路由特性为ASP.NET Core MVC专属特性,并将控制器基类改为ControllerBase(无需视图支持的API专用基类):
修改后的完整控制器代码:
using BlazorAppWebAPI.Data; using Microsoft.AspNetCore.Mvc; namespace BlazorAppWebAPI.API { [ApiController] // 使用ASP.NET Core路由特性定义基础路由 [Route("api")] // API控制器继承ControllerBase而非Controller public class APIController : ControllerBase { private static readonly string[] Summaries = new[] {"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"}; private readonly ILogger<APIController> _logger; public APIController(ILogger<APIController> logger) { _logger = logger; } // 简化HTTP请求特性,直接指定方法路由 [HttpGet("GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } } }
3. 确认Program.cs配置有效性
你的Program.cs已正确配置API所需服务与中间件,确保以下两行代码存在即可:
// 注册控制器服务 builder.Services.AddControllers(); // 映射控制器路由 app.MapControllers();
4. 验证路由访问
修改完成后,重新启动应用,访问https://localhost:44322/api/GetWeatherForecast即可正常获取API返回数据。
内容的提问来源于stack exchange,提问作者WinFXGuy
相关产品推荐
相关产品推荐

