nas*_*ski 5 .net c# asp.net-mvc
例如,从控制器我想做这样的事情:
var controller = new SomeController(); //different controller
//as of now, the controller.User is null, I want to set it
controller.DoSomething();
Run Code Online (Sandbox Code Playgroud)
我想设置用户,因为它使用角色来决定在这里做什么.我宁愿将所有角色处理留在该控制器中(而不是我的代码).有没有办法设置用户?或者可能将它作为同一个用户运行,因为我从同一MVC项目中的另一个控制器调用它?
编辑:在谢尔盖的帮助下,在我的Controller BaseClass中我的解决方案:
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;
}
Run Code Online (Sandbox Code Playgroud)
然后使用它:
var someController = RunControllerAsCurrentUser(new Some.NameSpace.SomeController());
var result = someController.SomeAction();
Run Code Online (Sandbox Code Playgroud)
这取决于您的方法使用的是什么.如果你只需要执行方法,那么你可以尝试这样的事情:
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();
Run Code Online (Sandbox Code Playgroud)
此方法将执行一些基本的控制器初始化,但如果您的方法使用某些参数或请求特定数据,则可能需要在其中指定它们RouteData.Values.
尝试这种方法,并在评论中告诉它是否适合您.
| 归档时间: |
|
| 查看次数: |
9324 次 |
| 最近记录: |