gpt4 book ai didi

c# - 我可以手动创建一个 Controller 实例,然后以用户身份运行它吗?

转载 作者:太空狗 更新时间:2023-10-29 22:22:20 26 4
gpt4 key购买 nike

例如,我想从一个 Controller 做这样的事情:

var controller = new SomeController(); //different controller
//as of now, the controller.User is null, I want to set it
controller.DoSomething();

我想设置用户,因为它使用角色来决定在这里做什么。我宁愿将所有角色处理留在该 Controller 中(而不是我的代码)。有没有办法设置用户?或者可能以与我从同一个 MVC 项目中的另一个 Controller 调用它的用户相同的用户身份运行它?

编辑:在 Sergey 的帮助下,我的解决方案在我的 Controller 基类中:

public T RunControllerAsCurrentUser<T>(T controller, RouteData routeData = null) where T : ControllerBase
{
var newContext = new ControllerContext(new HttpContextWrapper(System.Web.HttpContext.Current), routeData ?? new RouteData(), controller);
controller.ControllerContext = newContext;
return controller;
}

然后使用它:

var someController = RunControllerAsCurrentUser(new Some.NameSpace.SomeController());
var result = someController.SomeAction();

最佳答案

这取决于您的方法使用的是什么。如果您只需要执行方法,那么您可以尝试类似的方法:

var factory = DependencyResolver.Current.GetService<IControllerFactory>() ?? new DefaultControllerFactory();
TestController controller = factory.CreateController(this.ControllerContext.RequestContext, "Test") as TestController;

RouteData route = new RouteData();
route.Values.Add("action", "Test"); // ActionName, but it not required

ControllerContext newContext = new ControllerContext(new HttpContextWrapper(System.Web.HttpContext.Current), route, controller);
controller.ControllerContext = newContext;
ActionResult result = controller.Test();

此方法将执行一些基本的 Controller 初始化,但如果您的方法使用某些参数或请求特定数据,则可能需要在 RouteData.Values 中指定它们。

试试这个方法,并在评论中告诉你它是否适合你。

关于c# - 我可以手动创建一个 Controller 实例,然后以用户身份运行它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27433972/

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