Asp.net mvc 在MVC3中创建删除链接的正确方法是什么?

Asp.net mvc 在MVC3中创建删除链接的正确方法是什么?,asp.net-mvc,asp.net-mvc-3,actionlink,Asp.net Mvc,Asp.net Mvc 3,Actionlink,起初,我只是用Html.ActionLink方法创建删除链接。但后来我偶然看到一篇文章说这是错误的。不应该这样使用。然后提出了“主->细节”的方法。但这似乎很愚蠢。应该有一种方法可以让我拥有一个删除链接(带有一个“你确定吗”提示),但仍然不会成为一个安全漏洞。是吗?是的,使用GET方法删除数据是一种不好的做法。您需要使用POST方法,这可以通过表单或jquery/javascript来实现。但请注意,若使用带有附加promt的简单链接,用户可以单击中心按钮删除数据,或者禁用javascript。

起初,我只是用
Html.ActionLink
方法创建删除链接。但后来我偶然看到一篇文章说这是错误的。不应该这样使用。然后提出了“主->细节”的方法。但这似乎很愚蠢。应该有一种方法可以让我拥有一个删除链接(带有一个“你确定吗”提示),但仍然不会成为一个安全漏洞。是吗?

是的,使用GET方法删除数据是一种不好的做法。您需要使用POST方法,这可以通过表单或jquery/javascript来实现。但请注意,若使用带有附加promt的简单链接,用户可以单击中心按钮删除数据,或者禁用javascript。另外,这也是一个安全问题,有人可能会给你们链接,你们会从服务器上删除一些数据

示例:

<a href="/controller/delete/1" onclick="$.post(this.href); return false;">Delete</a>


如果服务器得到一个GET to/controller/delete/x,那么就提供一个带有POST表单的确认页面(在这个表单上,我们放置了两个按钮
Yes
No
,第一个按钮是带有隐藏字段的提交表单)。如果服务器收到POST(或者可能是DELETE)请求,则执行删除操作

在下面的文章中,他们描述了一种很好的方法来完成您想要的任务:

但我认为你实际上在寻找的另一种选择是:


所以你有两个选择,我希望它能对你有所帮助。

这个问题与链接或ActionLink之类的东西无关。问题是,您不应该在HttpGet请求上有删除的操作方法

至于你为什么不应该这样做。假设您的老板在您的在线员工档案中输入了谴责。如果您碰巧知道此应用程序使用Get请求删除记录,则只需创建一个精心编制的页面,其中img标记包含删除您的谴责的URL,然后将其放在公司主页上。最终,有权删除这些条目的人会进入网页并发出砰砰的一声。。你有明确的记录

这似乎没那么糟糕。你只是提高了你的地位。但想象一下,你的同事生你的气,他知道一个类似的把戏,可以让他骗你的老板降低你的工资

不再那么有趣了


允许这些类型的或操作是不安全的,因为用户甚至不知道它们在做什么就可以触发它们。

可能会复制好的链接,但最好在您的答案中提供、摘录和/或解释(换句话说,如果链接断开,您的答案应该能够自己站起来)。您是对的,但文章是独立的,它们提供了理论基础和实践实施,而如果我摘录它,它会给出一些想法,但会从基础知识方面询问人。这家伙问的问题不是很具体,因此整篇文章会做得更好。至少在我看来是这样。当问题非常具体时,答案将非常具体(阅读具体摘录或仅列出个人经历)。不过,感谢您注意到这一点。您需要确保在请求中包含RequestVerificationToken,并在控制器方法中包含[ValidateAntiForgeryToken]。