确定谁请求了操作方法

本文关键字:操作方法 请求 | 更新日期: 2023-09-27 18:03:34

所以,我有两个动作方法A= public ActionResult PlaceOrder(PlaceOrderVM model)和B= public ActionResult IngredientsDeficiency()。我想知道IN B是否B是从a重定向的结果,或者是一般重定向的结果。我只是想防止用户自己请求方法B。但如果从服务器重定向,他们可以看到视图。希望有人能理解…


作品

[HttpPost]
    [Authorize]
    [ValidateAntiForgeryToken]
    public ActionResult PlaceOrder(PlaceOrderVM model)
    {
        if (ModelState.IsValid)
        {
            var cosumed = _pizzaRepository.TryConsumeIngredients(model.PizzaId);
            if (cosumed == false)
            {
                return View("IngredientsDeficiency");
            }
            _pizzaRepository.InsertOrder(model);
            _pizzaRepository.Save();
            return RedirectToAction("Orders", "User");
        }
        return View(model);
    }

不工作

[HttpPost]
    [Authorize]
    [ValidateAntiForgeryToken]
    public ActionResult PlaceOrder(PlaceOrderVM model)
    {
        if (ModelState.IsValid)
        {
            var cosumed = _pizzaRepository.TryConsumeIngredients(model.PizzaId);
            if (cosumed == false)
            {
                return RedirectToAction("IngredientsDeficiency");
            }
            _pizzaRepository.InsertOrder(model);
            _pizzaRepository.Save();
            return RedirectToAction("Orders", "User");
        }
        return View(model);
    }
    [ChildActionOnly]
    public ActionResult IngredientsDeficiency()
    {
        return View("IngredientsDeficiency");
    }

Error: The action 'IngredientsDeficiency' is accessible only by a child request.

确定谁请求了操作方法

你可以使用ChildActionOnlyAttribute的动作属性。

请看这里的例子

一种方法是在public ActionResult PlaceOrder(PlaceOrderVM model)中设置会话变量标志,并在public ActionResult IngredientsDeficiency()中检查该标志。此外,您可以使用TempData集合,数据将仅为下一个请求存储,您不必担心删除它。

如果你不想使用会话,你也可以改变你的public ActionResult PlaceOrder(PlaceOrderVM model),直接返回IngredientsDeficiency的结果视图