【问题标题】:Call Mvc action olny form View调用 Mvc action olny form 查看
【发布时间】:2015-02-22 20:47:22
【问题描述】:

我有以下场景。

我的控制器检查用户是否拥有适当的权限,然后将他重定向到适当的操作。

所有动作都有 ChildActionOnly 属性,因为这些动作不能直接通过 URL 调用。 (只有具有适当权限的用户才能调用调用操作)

每个动作都返回带有特殊按钮的视图。此按钮可以调用关键操作。

在图片中我说明了它(链接在下面)

http://s23.postimg.org/fmndgt5p7/mvc.jpg

我的问题是如何在单击特殊按钮后调用 DeleteData Action?而且我不想通过 URL 直接调用 DeleteData 操作,我不想第二次检查用户权限。

【问题讨论】:

  • 与经典 ASP 无关。

标签: c# asp.net-mvc model-view-controller action-filter


【解决方案1】:

我不想通过 URL 直接调用 DeleteData 操作

那么,你想向服务器发送脑电波吗?服务器将如何获取消息来执行删除操作?

我不想第二次检查用户权限。

事实上,您正在与服务器进行另一次往返,因此您必须再次检查用户权限,至少如果您想获得任何安全措施的话。

MVC 不提供任何魔法。它仍然依赖于 stateless HTTP 协议来运行。所以它所做的一切都必须通过该协议进行通信。您可以通过 AJAX 进行调用和调用,因此不会有太多页面加载,但是与服务器的每次交互都必须与服务器进行一次完整的往返(请求和响应)。没有办法避免这种情况。

【讨论】:

    【解决方案2】:

    如果按钮没有删除权限,听起来您已经隐藏了该按钮,但在发出删除请求时您需要再次检查权限,因为这将是一个新请求。

    删除操作应仅限于 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 (Post/Redirect/Get) 如下所示,防止用户点击刷新并再次提交请求,它不会出现在浏览器的返回历史记录中。

    [HttpPost]
    public ActionResult DeleteSomething(int entityId){
        //Delete object then redirect back to original page
        return RedirectToAction("Index")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-23
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 2016-09-04
      • 2013-09-23
      • 1970-01-01
      相关资源
      最近更新 更多