![](/img/trans.png)
[英]How get data from asp.net web api in asp.net mvc controller in the same project
[英]How to get data from API and insert it into database without repeating in ASP.NET MVC?
所以,我有一个简单的 Web 应用程序,它从 api 获取数据,反序列化它,将它插入到数据库中,然后将它显示在一个表中。 我不知道如何将反序列化和插入与我的 Index() 方法分开,所以每次刷新页面时它都会反序列化并再次插入数据。
控制器:
public class HomeController : Controller
{
private DBContext db = new DBContext();
public string data = "...."; //here is the json data that i get from API
public ActionResult Index()
{
RootObj myData = JsonConvert.DeserializeObject<RootObj>(data);
foreach (var item in myData)
{
MyModel myItem = new MyModel
{
name = item.name,
symbol = item.symbol,
price = item.price,
};
db.MyItemsDB.Add(myItem);
db.SaveChanges();
}
return View(db.MyItemDB.ToList());
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
}
如何将反序列化和插入与 Index() 方法分开?
感谢帮助!
我没有想到我的 json 正在改变,但它确实发生了变化,因此我需要在每次页面刷新时插入到数据库中。 解决方案是在数据库中做唯一字段,这样就不会有重复的数据。
UPD: myItem 的字段“名称”必须是唯一的,但如果具有此名称的项目已存在,我需要更新其他字段中的数据,所以我这样做了:
db.MyItemsDB.AddOrUpdate(m => m.name, myItem);
db.SaveChanges();
假设您想为每个唯一用户插入数据库,您可以使用 cookie。
如果 cookie 不存在,则用户尚未访问该站点(或已删除他的 cookie) 如果 cookie 存在,则用户已经访问过并且您不进行数据库插入。
它不会删除所有插入,但会减少它们。
If(HttpContext.Current.Response.Cookies.AllKeys.Contains("myCookie") == false)
db.SaveChanges();
else
{
HttpCookie myCookie = new HttpCookie("myCookie");
myCookie.Value = "SomeInfo";
myCookie.Expires = DateTime.Now.AddDays(1d);
Response.Cookies.Add(myCookie);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.