仅在从特定操作重定向时才允许访问操作

是否有一种限制对操作的访问权限的好方法,因此如果您从另一个操作重定向,则只能访问它。 例如:

[HttpPost] public virtual ActionResult Create(MyViewModel vm) { if (ModelState.IsValid) { // do some work return RedirectToAction("CreateSuccess"); } else { return View(vm); } } public virtual ActionResult CreateSuccess() { // only allow execution if you were redirected from Action "Create" } 

一种简单的方法是在第一个方法中在TempData中存储一个标志,并检查该标志是否存在于重定向到的方法中。
TempData用于在操作请求之间传递状态信息,并且只持续请求的持续时间,因此您无需担心将其清除。

除非您包含指示此类的参数,否则无法知道“从”操作。 最简单的方法是附加“SourceAction”或“FromAction”参数,并在“目标”操作中进行检查。

问题是,你为什么要这样做? 也许有一个更好的解决方案来解决您的主要问题。

无论如何,您可以使用HttpContext.Current.Request.UrlReferrer属性来检查上一页Url。

第一解决方案

你可以这样做:

 [HttpPost] public virtual ActionResult Create(MyViewModel vm) { if (ModelState.IsValid) { // do some work return this.CreateSuccess(); } else { return View(vm); } } [NonAction] public virtual ActionResult CreateSuccess() { // do what's needed } 

最后一个方法只能从其他操作方法执行。 但它本身不能执行。

二解决方案

如果您知道可以重用此属性,则可以通过创建自定义操作方法选择器属性来解决此问题。 您可以编写一个自定义操作方法选择器属性来检查请求引用并使用适当的方法。

阅读自定义操作选择器属性 。