我有以下情况。
我的控制器检查用户是否拥有适当的权限,然后重定向他正确的操作。
所有操作都有ChildActionOnly属性,因为这些操作不能直接通过URL调用。 (只有具有适当权限的用户才能调用调用操作)
每个操作都会返回带有特殊按钮的视图。此按钮可以调用关键操作。
在图片中我说明了(链接在下面)
http://s23.postimg.org/fmndgt5p7/mvc.jpg
我的问题是如何在点击特殊按钮后调用DeleteData Action?我不希望能够通过URL直接调用DeleteData Action,我不希望第二次检查用户权限。
答案 0 :(得分:1)
我不希望能够通过网址直接调用DeleteData Action
那么,您想要将脑电波发送到服务器吗?服务器如何获取执行删除操作的消息?
我不想第二次检查用户权限。
事实是你正在再次往返服务器,所以你必须再次检查用户权限,至少如果你想要有任何安全措施。
MVC并没有提供任何魔力。它仍然依赖于无状态 HTTP协议来运行。所以它所做的一切都必须通过该协议进行通信。您可以通过AJAX获得花哨和拨打电话,因此没有太多的页面加载,但是与服务器的每次交互都必须对服务器进行完整的往返(请求和响应)。没有办法避免这种情况。
答案 1 :(得分:0)
听起来你已经隐藏了按钮,如果他们没有删除权限,但你需要在发出删除请求时再次检查权限,因为这将是一个新的请求。
删除操作应仅限于POST Why shouldn't data be modified on an HTTP GET request?
您需要通过仅响应POST的URL公开删除操作,并且需要再次验证权限,因为它是对服务器的新请求。
可以使用ajax请求或(Post / Redirect / Get)完成 http://en.wikipedia.org/wiki/Post/Redirect/Get
A(发布/重定向/获取)如下所示,可防止用户再次单击刷新并再次提交请求,并且不会在浏览器中显示历史记录。
[HttpPost]
public ActionResult DeleteSomething(int entityId){
//Delete object then redirect back to original page
return RedirectToAction("Index")
}