gpt4 book ai didi

asp.net - 在 ASP MVC3 中,如何使用 uri 执行 Controller 和 Action ?

转载 作者:行者123 更新时间:2023-12-04 22:00:49 25 4
gpt4 key购买 nike

在执行 Controller 操作时,我如何获取一个 Uri(不是请求的那个)并从 Controller 调用如果该 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 请求上下文中的自定义错误页面执行错误 Controller 。您还可以将复杂对象放在 routeData 哈希中,然后将这些复杂对象作为操作参数取回。我使用它来传递错误 Controller 操作发生的实际异常。

更新:

为了在考虑当前路由的情况下将 URL 解析为其路由数据 token ,您可以:
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 - 在 ASP MVC3 中,如何使用 uri 执行 Controller 和 Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5213290/

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