gpt4 book ai didi

c# - ASP.NET MVC 初始化 Controller 并以编程方式调用操作

转载 作者:太空狗 更新时间:2023-10-29 18:24:47 24 4
gpt4 key购买 nike

我正在构建一个预定作业 Controller - 这些作业将调用一个 Controller 和一个捕获结果的 Action。我宁愿所有这些都发生在后端,而不涉及 http 调用。

这有点像单元测试中发生的事情——例如:

var controller = new TestController();
var result = controller.Index("TestParameter") as ViewResult;

这个例子中的问题是 Controller 和 Action 不是动态的,有谁知道如何初始化 Controller 并调用一个带有 Controller 名称和 Action 作为字符串参数的 Action ?比如——

public ActionResult run(string controllerName, string actionName)
{
var controller = new Controller(controllerName);
var result = controller.action(actionName).("TestParameter") as ViewResult;
return Content(result);
}

最佳答案

使用 ControllerFactoryActionDescriptor 来动态执行 Action :

public ActionResult Run(string controllerName, string actionName)
{
// get the controller
var ctrlFactory = ControllerBuilder.Current.GetControllerFactory();
var ctrl = ctrlFactory.CreateController(this.Request.RequestContext, controllerName) as Controller;
var ctrlContext = new ControllerContext(this.Request.RequestContext, ctrl);
var ctrlDesc = new ReflectedControllerDescriptor(ctrl.GetType());

// get the action
var actionDesc = ctrlDesc.FindAction(ctrlContext, actionName);

// execute
var result = actionDesc.Execute(ctrlContext, new Dictionary<string, object>
{
{ "parameterName", "TestParameter" }
}) as ActionResult;

// return the other action result as the current action result
return result;
}

参见 MSDN

关于c# - ASP.NET MVC 初始化 Controller 并以编程方式调用操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28967562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com