.NET Core 3.1/5 Api 查询字符串参数不起作用

问题描述

我注意到我的 .Net Core 3.1 和 .Net Core 5 API 有一些奇怪的地方。当有 2 种不同的 GET 方法按 id 检索所有记录和单个记录时,基于路由的参数有效但查询字符串参数无效。

这是一些示例代码

using Core5TestApi.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Core5TestApi.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class DataController : ControllerBase
    {
        private readonly ILogger<DataController> _logger;
        List<Data> allData = new List<Data>{
                new Data { Id = 1,Name = "Name 1" },new Data { Id = 2,Name = "Name 2" }
            };

        public DataController(ILogger<DataController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public IEnumerable<Data> GetAll ()
        {
            return allData;
        }

        [HttpGet("{id}")]
        [Route("{id}")]
        public Data Get(int id)
        {
            return allData.First(i => i.Id == id);
        }
    }
}

以下是网址和结果

调用:http://localhost:51672/api/data 结果:[{"id":1,"name":"Name 1"},{"id":2,"name":"Name 2"}]

调用:http://localhost:51672/api/data/1 结果:{"id":1,"name":"Name 1"}

调用:http://localhost:51672/api/data?id=1 结果:[{"id":1,"name":"Name 2"}]

最后一个结果会忽略查询字符串参数并执行 GetAll。

我觉得我错过了一些非常基本的东西,尽管我相信我以前看过这部作品

我还在 Get 方法中的参数之前尝试了 [FromQuery] 属性。这实际上打破了基于路由的参数路径

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)