首页 > 解决方案 > 迁移到 .net 核心后,FromBody 值不会覆盖默认参数值

问题描述

我在 .Net Core 3.1 WebApi 中实现了以下端点。TestFilter 对象有一个列表参数TestTypes。TestTypes 在构造后会获得一个默认的 TestType 值。当使用 TestFilter 参数调用端点时,我希望默认值将替换为传入值。相反,它被添加到列表中,因此默认值仍然是其中的一部分。

这在使用 .Net472 时有效,但在迁移到 .Net Core 3.1 后,默认值始终是数组的一部分。

如果客户端提供了默认参数值,有没有办法指定覆盖?

    [HttpPost]
    [Route("test")]
    public async Task<IHttpActionResult> GetTests([FromBody] TestFilter filter)
    {
         // Call repo
    }
    
  public class TestFilter
  {
     public IReadOnlyCollection<TestType> TestTypes { get; set; }
     public string Description;

    TestFilter() {
            TestTypes = new List
                      {
                         new TestType("AdvancedTest", 10)
                      };
    }
}

标签: c#asp.net-core

解决方案


试着改变你的TestFilter样子:

public class TestFilter
        {
            public IReadOnlyCollection<TestType> TestTypes { get; set; } = new List<TestType>{new TestType("AdvancedTest", 10)};
            public string Description;

        }

测试类型:

public class TestType
        {
            public string v1 { get; set; }
            public int v2 { get; set; }
            public TestType() { }
            public TestType(string v1, int v2)
            {
                this.v1 = v1;
                this.v2 = v2;
            }
        }

结果: 在此处输入图像描述

更新:

我使用以下类,它可以工作。

public class TestFilter: TestBaseFilter
        {
            
            public string Description;

        }
        public class TestBaseFilter
        {
            public IReadOnlyCollection<TestType> TestTypes { get; set; } = new List<TestType> { new TestType("AdvancedTest", 10) };
        }

推荐阅读