Asp.net mvc 3 ASP.net MVC 3更新或删除

Asp.net mvc 3 ASP.net MVC 3更新或删除,asp.net-mvc-3,Asp.net Mvc 3,我刚刚开始探索MVC3,并正在研究一种让用户启用/禁用其帐户中出现的图像的方法…通过链接和通过HttpPost传递的id将活动图像更新为true或false var image1 = new BigImage(); image1.id = id; db.BigImage.Attach(image1); image1.active = 0;

我刚刚开始探索MVC3,并正在研究一种让用户启用/禁用其帐户中出现的图像的方法…通过链接和通过HttpPost传递的id将活动图像更新为true或false

                    var image1 = new BigImage();
                    image1.id = id;
                    db.BigImage.Attach(image1);
                    image1.active = 0;
                    db.SaveChanges();
问题: 我如何避免出现安全漏洞或某些情况,例如某人可以导航到/home/user/image/deactivate/5。正确的方法是什么

                    var image1 = new BigImage();
                    image1.id = id;
                    db.BigImage.Attach(image1);
                    image1.active = 0;
                    db.SaveChanges();

我读了一篇关于不使用删除链接的帖子。更新也有同样的问题吗?我很困惑。

您将需要使用身份验证来建立权限并验证用户。ASP网站是一个很好的起点:

HTTPGET不应用于更改基础数据。主要原因是网络爬虫和搜索引擎可以并且将通过以下链接无意中修改或删除内容

                    var image1 = new BigImage();
                    image1.id = id;
                    db.BigImage.Attach(image1);
                    image1.active = 0;
                    db.SaveChanges();
如果像@Will提到的那样对请求进行身份验证,这并没有什么大不了的,但这不是一个好习惯

                    var image1 = new BigImage();
                    image1.id = id;
                    db.BigImage.Attach(image1);
                    image1.active = 0;
                    db.SaveChanges();
如果您想使用链接并遵循有关使用POST进行数据更改的最佳实践,您可以使用带有按钮的表单,该按钮显示为链接。下面是我在MVC2中使用的代码片段:

                    var image1 = new BigImage();
                    image1.id = id;
                    db.BigImage.Attach(image1);
                    image1.active = 0;
                    db.SaveChanges();
<% using (Html.BeginForm("Delete", "Item", new { id = item.Id }, FormMethod.Post, new { onsubmit = "return confirm('Are you sure you want to delete " + item.DisplayString + "?');" }))
                   { %>
                <input class="link-button" type="submit" value="Delete"  />
                   <% } %>

然后,当然,将
[HttpPost]
属性放在一个控制器方法上,该方法实际上会删除该项。

非常感谢!成功了!超级的!如果其他人想知道razor的语法版本@使用(Html.BeginForm(“Deactivate”,…){your form stuff here}
                    var image1 = new BigImage();
                    image1.id = id;
                    db.BigImage.Attach(image1);
                    image1.active = 0;
                    db.SaveChanges();