首页 > 解决方案 > 防止用户直接调用action方法

问题描述

我有3个View这样的:

  public ActionResult Index()
    {
         return View();
    }

    public ActionResult Step2()
    {

         return View();
    }
    public ActionResult Step3()
    {
         return View();
    }        

和 3 个 HttpPost 操作

    //Step 1
    [HttpPost]
    [ValidateAntiForgeryToken]
    public JsonResult Index(string number){}
    //Step 2
    [HttpPost]
    [ValidateAntiForgeryToken]
    public JsonResult Step2(string number){}
    //Step 3
    [HttpPost]
    [ValidateAntiForgeryToken]
    public JsonResult Step3(string number){}

对于HttpPost Action Method我创建的HTML Form每个表单,我希望用户逐步提交每个表单(step 1-> step 2-> step 3

一切正常,但我不希望用户可以去重定向domain/controller/step2domain/controller/step3. 我的意思是,用户必须跟随我的路由器step 1-> step 2->step3

标签: c#asp.net-mvc

解决方案


有一些方法可以解决您的问题。实现此目的的一种方法是TempData在重定向命令之前使用并检查TempData. HttpGet Action Method例如,对于您的第 2 步检查,您可以这样做:

[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Index(string number)
{
    //your business code 

    TempData["FirstStepDone"] = true;

    // return RedirectTo()
}

public ActionResult Step2()
{
    if (TempData["FirstStepDone"] == null)
        //return error

    return View();
}

推荐阅读