views:

47

answers:

3

Hi

Is there a good way to restrict the access to an action, so you can only access it, if you were redirected from another action. For example:

    [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" 
    }
+1  A: 

There is no way to know the "from" action unless you include parameters indicating such. The easiest way is to append a "SourceAction" or "FromAction" parameter and check it in the "destination" action.

Dave Swersky
+4  A: 

An easy way would be to store a flag in TempData in the first method and check that the flag exists in the method that is redirected to.
TempData is there to pass state information between action requests and will only last the duration of the request so you will not need to worry about clearing it down.

Andy Rose
+1  A: 

The question is, why do you want to do that? Maybe there is a better solution for your primary problem.

Anyway, you can use the HttpContext.Current.Request.UrlReferrer Property to check the previous page Url.

Guilherme Oenning
The reason is that I want to display some information, that should only be visible for people who successfully (and therefore authorized) performed a previous action
Fabiano
Then I would do what Andy Rose did, but using Session insted of TempData. By using the Session your telling your application that the current user has performed a given action and he is able to execute that action. Or even put it on a Database if you want to use that information for longer than a Session.
Guilherme Oenning