C# Add方法将null空对象返回到数据库
我从一个API获取数据,将其反序列化以使用我的模型,但当我尝试将该数据添加到数据库时,它只存储一个空白对象。我尝试通过CrdResponse传递数据,但这提供了一个我无法绕过的异常C# Add方法将null空对象返回到数据库,c#,.net,C#,.net,我从一个API获取数据,将其反序列化以使用我的模型,但当我尝试将该数据添加到数据库时,它只存储一个空白对象。我尝试通过CrdResponse传递数据,但这提供了一个我无法绕过的异常 public async Task <ActionResult> InsertCard(Card card) { List<Card> CardsInfo = new List<Card>(); var getUr
public async Task <ActionResult> InsertCard(Card card)
{
List<Card> CardsInfo = new List<Card>();
var getUrl = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;
var test = new Uri(getUrl);
var id = test.Segments.Last();
SingleResult += id;
using (var client = new HttpClient())
{
//passing service baseurl
client.BaseAddress = new Uri(SingleResult);
client.DefaultRequestHeaders.Clear();
//Define request data format
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//Sending request to find web api REST service resource Getallcards using HTTPClient
HttpResponseMessage Res = await client.GetAsync(SingleResult);
//Checking the response is successful or not which is sent using HttpClient
if (Res.IsSuccessStatusCode)
{
//Storing the response details received from web api
var CrdResponse = Res.Content.ReadAsStringAsync().Result;
//Deserializing the response recieved from web api and storing in to the card list
CardsInfo = JsonConvert.DeserializeObject<List<Card>>(CrdResponse);
_context.Cards.Add(card);
_context.SaveChanges();
}
}
return RedirectToAction("Index", "API");
}
这就是我希望获得的所有信息您忘记等待ReadAsStringAsync方法的结果,如下所示:
var CrdResponse = await Res.Content.ReadAsStringAsync();
因为它是一个异步方法,所以在调用result时它可能没有完成操作,这取决于您试图读取的字符串的大小
希望有帮助 您正在添加您在方法参数中传递的“卡”:
public async Task <ActionResult> InsertCard(Card card)
...
_context.Cards.Add(card);
公共异步任务插入卡(卡片)
...
_context.Cards.Add(卡片);
我认为您要做的是通过从字符串响应反序列化的卡:
CardsInfo = JsonConvert.DeserializeObject<List<Card>>(CrdResponse);
foreach(Card c in CardsInfo)
{
_context.Cards.Add(c);
}
CardsInfo=JsonConvert.DeserializeObject(CrdResponse);
foreach(CardsInfo中的卡c)
{
_上下文。卡片。添加(c);
}
还有什么错误?那么,您是否在那里设置了断点以查看卡
为空的原因?我看不到您在任何地方使用Web服务的回复,这可能是原因吗?当我尝试使用Cards信息时,错误是参数1:无法从“System.Collections.Generic.List”转换为“YGOBuilder.Models.Card”YgoBuilders,就像您得到一个vlaue,并且尝试反序列化为列表一样,行CardsInfo=JsonConvert.DeserializeObject(CrdResponse)代码>是错误发生的地方,请尝试将其设置为CardsInfo=JsonConvert.DeserializeObject(CrdResponse)代码>当我调用同一个方法来显示所有结果时,它正确地拉入,因此我假设它是正确的,否则它将不适用于我使用的索引方法。这实际上非常接近,但是由于某种原因,卡ID不接受通过JSON提供的ID。而是在数据库中递增。问题-数据库中是否已经存在卡
-在这种情况下,您想更新它,而不是添加它,如果不想,那么您的数据库设计是错误的-当您不需要时,您有一个自动递增键。不,卡不存在,我正在调用api并根据api响应中的值在数据库中添加新对象。因此,需要更改数据库ID列以允许插入。这取决于您使用的数据库类型。@AndyStav您需要将数据库配置为不自动生成ID。看一看[DatabaseGenerated(DatabaseGeneratedOption.None)]
类的Id
属性上的属性可以做这项工作(或者使用文章中所示的fluent API)。这家伙的回答不应该有它的反对票.Result
通常是一个很大的禁忌,尤其是在一个已经正确标记为async
和wait
s其他调用的方法中。这是一个需要做出的正确改变。
public async Task <ActionResult> InsertCard(Card card)
...
_context.Cards.Add(card);
CardsInfo = JsonConvert.DeserializeObject<List<Card>>(CrdResponse);
foreach(Card c in CardsInfo)
{
_context.Cards.Add(c);
}