mci*_*321 4 asp.net asp.net-mvc routing asp.net-mvc-3
在执行控制器操作时,我怎样才能获取Uri(不是请求的那个)并从控制器调用该操作,如果Uri是被调用的那个?我不能简单地重定向到该操作,因为我需要它在同一个请求上下文中发生.
Dar*_*rov 12
假设你有权访问HttpContext(我想你做的就是这样),你可以:
var routeData = new RouteData();
// controller and action are compulsory
routeData.Values["action"] = "index";
routeData.Values["controller"] = "foo";
// some additional route parameter
routeData.Values["foo"] = "bar";
IController fooController = new FooController();
var rc = new RequestContext(new HttpContextWrapper(HttpContext), routeData);
fooController.Execute(rc);
Run Code Online (Sandbox Code Playgroud)
我个人使用这种方法处理我的应用程序内的错误.我把它放入Application_Error
并执行错误控制器,以保留在初始HTTP请求的上下文中的自定义错误页面.您还可以在routeData
哈希中放置复杂对象,然后将这些复杂对象作为操作参数返回.我使用它来传递错误控制器操作发生的实际异常.
更新:
为了解析其路线数据令牌的URL,考虑到当前路线,您可以:
var request = new HttpRequest(null, "http://foo.com/Home/Index", "id=1");
var response = new HttpResponse(new StringWriter());
var httpContext = new HttpContext(request, response);
var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));
var values = routeData.Values;
var action = values["action"];
var controller = values["controller"];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3950 次 |
最近记录: |