所以,我有两种行动方法A = public ActionResult PlaceOrder(PlaceOrderVM model)
和B = public ActionResult IngredientsDeficiency()
。我想知道IN B,如果B是从A重定向的结果,或者在一般重定向中。我只是想阻止用户自己请求方法B.但他们可以看到View是否是从服务器重定向。希望有人能理解......
作品
[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");
}
错误:The action 'IngredientsDeficiency' is accessible only by a child request.
答案 0 :(得分:1)
您可以使用ChildActionOnlyAttribute操作属性。
请参阅example here
答案 1 :(得分:0)
一种方法是在public ActionResult PlaceOrder(PlaceOrderVM model)
中设置会话变量标志,并在public ActionResult IngredientsDeficiency()
中检查该标志。此外,您可以使用TempData集合,数据将仅存储在下一个请求中,您不必担心删除它。
如果您不想使用会话,也可以更改public ActionResult PlaceOrder(PlaceOrderVM model)
以直接返回IngredientsDeficiency
的结果视图。