加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 00:14:20 所属栏目:asp.Net 来源:网络整理
导读:在执行控制器操作时,我怎样才能获取Uri(不是请求的那个)并从控制器调用该操作,如果Uri是被调用的那个?我不能简单地重定向到该操作,因为我需要它在同一个请求上下文中发生. 解决方法 假设您可以访问HttpContext(我想您在询问时就这样做了),您可以: var rout
在执行控制器操作时,我怎样才能获取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"];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读