【发布时间】:2021-12-25 09:10:48
【问题描述】:
我有一个带有 Angular 应用程序的 .NET Core 5,并且我的控制器按区域分组。我使用 NET Core 1 制作了该应用程序,并成功将其迁移到 5 个而没有任何问题,但是将其迁移到 NET 6 时,我在进行 API 调用时会出现 404 错误。
我当前的 NET 5 设置如下所示:
[Authorize]
[ApiController]
[Route("[area]/[controller]/[action]")]
public abstract class BaseController : Controller
{
}
[Area("Home")]
public abstract class HomeController : BaseController
{
}
public class AccountController : HomeController
{
[HttpGet]
public async Task<IActionResult> GetSomething()
{
}
我在 VS2022 中新建了一个项目,复制了所有内容,在Program.cs 中进行了更改,并将BaseController 更改为继承ControllerBase。
Angular 应用运行正常,但我的所有 API 调用都返回 404。
我什至在 NET 5 应用程序中都没有这个,但我现在添加它以防万一:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name : "areas",
pattern : "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
但还是没有运气。
编辑:
使用this 答案,我列出了所有路线并得到了这个:
{area: 'Home', controller: 'Account', action: 'GetSomething', name: null, template: 'Home/Account/GetSomething'}
我仍然不知道为什么它不起作用。
【问题讨论】:
-
您不必复制任何内容。只需将目标从
net5.0更改为net6.0。您不需要更改基类。ControllerBase的工作方式与 .NET 5 中的相同 - 它是 API 和 MVC 控制器的通用基类,不包含任何与视图相关的成员,例如View()和TempData -
更改目标框架有效,但在新的 NET 6 项目模板中使用区域无效。这就是我的观点。
标签: c# angular routes .net-6.0