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

时间:2020-06-24 15:53:41

标签: c# routes upgrade asp.net-core-3.1

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

我已经将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控制器一起使用?

1 个答案:

答案 0 :(得分:2)

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