确定谁请求了操作方法
本文关键字:操作方法 请求 | 更新日期: 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
的结果视图