如何在 .net 中获取主控制器和动作名称

How to get main controller and action name in .net

我有一个 .net 核心 mvc web 项目,我正在尝试在操作中获取操作和控制器名称。例如

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

这些代码为我提供了控制器和操作的价值,但我想知道哪个页面确实发送了 post。

例如:我们在该控制器内部有 HomeControllerRequestQuote 操作。如果另一个页面触发来自不同控制器和动作的 RequestQuote 动作,我想获取该控制器和动作名称。我希望我能清楚我的意思。

这是一个您可以关注的工作演示:

登录控制器

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

家庭控制器

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

动作过滤器:

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)
    {
        
    }      
}

在Startup.cs中注册服务:

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