asp.net – 在ASP MVC3中,如何使用uri执行控制器和动作?

前端之家收集整理的这篇文章主要介绍了asp.net – 在ASP MVC3中,如何使用uri执行控制器和动作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在执行控制器操作时,我怎样才能获取Uri(不是请求的那个)并从控制器调用该操作,如果Uri是被调用的那个?我不能简单地重定向到该操作,因为我需要它在同一个请求上下文中发生.

解决方法

假设您可以访问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);

我个人使用这种方法来处理我的应用程序内的错误.我把它放在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"];

猜你在找的asp.Net相关文章