重复项已添加到列表中

时间:2019-05-10 09:47:29

标签: c# asp.net-web-api asp.net-core asp.net-web-api2

我正在尝试将字符串列表发送到Web api,并且此列表是我在类构造函数和要传递给Web api的同一类中初始化的。

当我初始化课程时;列表已正确填充,但在将其发送到Web api之后,相同的项又被添加到列表中。不知道为什么会这样。

我正在接受客户的这些价值观;如果客户端没有提供任何值,那么我想将默认值填充到列表中。

下面是我的代码

public class RequestDto
    {
        public RequestDto()
        {
            TypeNames = new List<string>();
            TypeNames.Add(new string("Type1"));
            TypeNames.Add(new string("Type2"));
            TypeNames.Add(new string("Type3"));

        }

        public string CompanyName { get; set; }
        public string Version { get; set; }
        public List<string> TypeNames { get; set; }
    }

然后我将类传递给网络api,如下所示

using (var client = new HttpClient())
            {
                string url = "some url";

                var postTask = client.PostAsJsonAsync(url, objrequestdto);
                postTask.Wait();

                if (postTask.Result.IsSuccessStatusCode)
                {
                    // Do Something
                }
            }

下面是我的api,在该参数中,接收到参数后,我可以看到再次添加了这些项。

[HttpPost]
        public IActionResult GetTypeDetails([FromBody] RequestDto requestdto) // Here I am getting duplicate/Repeated Values
        {
            try
            {
                // Some logic

            }
            catch (Exception e)
            {
                Log.Error("Some Error");
                return StatusCode(500, e.Message);
            }
        }

这是我在调用Web api之前填充RequestDto类的方式。

编辑1:

RequestDto objrequestdto = GetConfigurations(configName);

private RequestDto GetConfigurations(string configName)
        {

            RequestDto requestdto = new RequestDto();

            /// Add configurations here.

            return requestdto;
        }

因此,我在Web API中得到重复的记录。

对此有任何帮助!

3 个答案:

答案 0 :(得分:1)

这是因为要在构造函数中添加值。

答案 1 :(得分:0)

您正在使用默认构造函数添加默认值,Serializer也使用该默认值。序列化程序将首先调用您的默认构造函数,然后它将填充JSON中的项目。

为防止重复,您可以使用T1代替T2

def encode(string)
    string.unpack("B*").to_s.gsub("1", "b").to_s.gsub("0", "a")
end

puts encode("Michael")

答案 2 :(得分:0)

如果有人在寻找答案,我已经通过在Web API项目的Startup.cs文件中添加以下json格式来解决它。

services.AddMvc().AddJsonOptions(options =>
            {
                options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
                options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
                options.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local;
                options.SerializerSettings.ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace;
            });

这已经为我解决了这个问题。