将 Angular 应用程序迁移到 NET 6 时区域不起作用
Areas do not work when migrating an Angular app to NET 6
我有一个带有 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 调用 return 404。
我什至在 NET 5 应用程序中都没有这个,但我现在添加它以防万一:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name : "areas",
pattern : "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
但还是没有运气。
编辑:
使用 答案,我列出了所有路线并得到了这个:
{area: 'Home', controller: 'Account', action: 'GetSomething', name: null, template: 'Home/Account/GetSomething'}
我仍然不知道为什么它不起作用。
由于代理,您必须列出 proxy.conf.js
中的所有区域 PROXY_CONFIG
。添加区域,或者如果您使用控制器,请将控制器名称添加到 context
属性,例如:
context: ['/AdminApi', '/HomeApi' ... ]
或者,作为解决方法,在所有调用之前添加 /Api
,然后在代理设置中只添加
我有一个带有 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 调用 return 404。
我什至在 NET 5 应用程序中都没有这个,但我现在添加它以防万一:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name : "areas",
pattern : "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
但还是没有运气。
编辑:
使用
{area: 'Home', controller: 'Account', action: 'GetSomething', name: null, template: 'Home/Account/GetSomething'}
我仍然不知道为什么它不起作用。
由于代理,您必须列出 proxy.conf.js
中的所有区域 PROXY_CONFIG
。添加区域,或者如果您使用控制器,请将控制器名称添加到 context
属性,例如:
context: ['/AdminApi', '/HomeApi' ... ]
或者,作为解决方法,在所有调用之前添加 /Api
,然后在代理设置中只添加