Home > Software engineering >  How to get main controller and action name in .net
How to get main controller and action name in .net

Time:05-31

I have a .net core mvc web project and i'm trying to get action and controller name in the action. For example

 string actionName = ControllerContext.RouteData.Values["action"].ToString();
 string controllerName = ControllerContext.RouteData.Values["controller"].ToString();

those codes are giving me the value of controller and action but i wanna know which page did send that post.

For example: we have HomeController and RequestQuote action inside of that controller. If another page triggers that RequestQuote action from different controller and action, i wanna get that controller and actions name. I hope i can be clear what i'm trying to meant it.

CodePudding user response:

Here is a working demo you could follow:

LoginController

public class LoginController : Controller
{
    public IActionResult Index()
    {
        return RedirectToAction("RequestQuote", "Home");
    }
}

HomeController

public class HomeController : Controller
{
    public ActionResult RequestQuote()
    {
        string controllerName = HttpContext.Session.GetString("controller");
        string actionName = HttpContext.Session.GetString("action");
        return View();
    }
}

ActionFilter:

public class CustomFilter : IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext context)
    {
        string actionName = context.HttpContext.Request.RouteValues["action"].ToString();
        string controllerName = context.HttpContext.Request.RouteValues["controller"].ToString();
        context.HttpContext.Session.SetString("controller", controllerName);
        context.HttpContext.Session.SetString("action", actionName);
    }
    public  void OnActionExecuting(ActionExecutingContext filterContext)
    {
        
    }      
}

Register the service in Startup.cs:

services.AddControllersWithViews(opt => {
    opt.Filters.Add(new CustomFilter());
});
  • Related