Domanda

When I attempt to call a specific controller action (method) from within another controller action (method), the attributes that have been applied to the action I'm calling aren't applied/enforced.

For example, if I have a Controller action with some attributes applied like so:

[Authorize]
[HttpPost]
public ActionResult SaveUsers(List<User> users) { .. }

and then I call this action from another Controller action, the attributes aren't executed/enforced.

MVC seems to manage the execution of these ActionFilterAttribute/ActionMethodSelectorAttribute within its default implementation of "ActionInvoker" but unfortunately, when you use the ActionInvoker directly, it doesn't return the result of the action method, rather it simply calls the action and writes directly to the Response stream.

My goal is this:

  1. call a specific action method
  2. have attributes enforced/executed
  3. obtain result from action method

I have managed to do 1 and 3, but not 2.

È stato utile?

Soluzione

You can try to explicitly go through an ActionInvoker. This is the object that executes your actions normally, but it is called by the MVC pipeline. In your source action, do something like this:

this.ActionInvoker.InvokeAction(this.ControllerContext, "TargetActionName");

This may work, but you introduce the action name as a string, which is not a good thing.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top