我正在尝试将字符串列表发送到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中得到重复的记录。
对此有任何帮助!
答案 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;
});
这已经为我解决了这个问题。