.net core 3.1:剃须刀页面和 API 控制器的端点路由

.net core 3.1: Endpoint routing for razor pages AND API controllers

**编辑 - 添加查询字符串

我已经将 Core 2.2 站点升级到 3.1,唯一仍然困扰我的问题如下:我在同一个应用程序中有常规的 Razor 页面和 API 控制器 - 共享代码和功能使它成为一个简单的解决方案。在 2.2 中,以下路由设置没有问题:

services.AddMvc()

 app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

分别在Startup.ConfigureServicesStartup.Configure中。

我的控制器看起来像:

{
    [Route("api/[controller][")]
    [Produces("application/json")]
    [ApiController]
    public class RRateController : ControllerBase
    {
        public RRateController()
        {
        }

        [HttpGet]
        public async Task<clsObject> Get([FromQuery] string[] TopCodes)
        {
            clsObject obj = new clsObject();
            ...
            return obj;
        }
}

使用查询字符串调用控制器:

Root + '/API/RRate?TopCodes=Val1&TopCodes=Val2'

正在升级到.net core 3.1,我正在使用

    services.AddControllers();
    services.AddRazorPages();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        endpoints.MapControllers();
    };

ConfigureServicesConfigure 中。

我的问题是 TopCodes 的字符串数组没有传递到控制器中。访问了控制器,但数组为空。没有参数的类似控制器在新设置下工作正常。

我应该如何配置端点以与具有 Controller\Action\parameter 模式的 Razor 页面以及 API 控制器一起工作?

api/[controller][ 中的 [ 是故意的吗?不应该是api/[controller]吗?