gpt4 book ai didi

.net - 如何仅在给定 uri 的情况下从另一个 Controller 方法调用一个 Controller 方法

转载 作者:行者123 更新时间:2023-12-04 17:23:01 24 4
gpt4 key购买 nike

为简单起见,考虑一个人员资源,例如

{"name":"Fred Flintston",
"worksAt":
{"href":"api/sites?cn=Slate%20Rock%20and%20Gravel%20Company"}
}

当我在发送到 PeopleController 的 POST 上收到此消息时,我需要从 worksAt.href 获取站点资源。

我想做的是利用已经知道如何解析 uri 和调用正确方法的路由引擎在 SitesController 上调用正确的 GET。

我看到一个建议here这看起来相当严厉,我完全不确定这将如何允许已经碰巧进行的授权。

最佳答案

您可以尝试以下方法,但如果您详细描述您想要实现的目标,我们或许能够找到更好的解决方案。它基于 MVC,但也适用于 Web API。

var baseUrl = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
var requestUrl = new Uri(baseUrl + "Home/Index?i=42");

//get method info
var httpContext = new HttpContextWrapper(new HttpContext(new HttpRequest("/", requestUrl.AbsoluteUri, ""), new HttpResponse(new StringWriter())));
var requestContext = new RequestContext(httpContext, RouteTable.Routes.GetRouteData(httpContext));
var controllerType = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(x => x.Name == requestContext.RouteData.Values["controller"].ToString() + "Controller");
var controllerContext = new ControllerContext(requestContext, Activator.CreateInstance(controllerType) as ControllerBase);
var controllerDescriptor = new ReflectedControllerDescriptor(controllerType);
var actionDescriptor = controllerDescriptor.FindAction(controllerContext, controllerContext.RouteData.Values["action"].ToString());
var methodInfo = (actionDescriptor as ReflectedActionDescriptor).MethodInfo;

//parse the query string
var qscoll = HttpUtility.ParseQueryString(requestUrl.Query);
//and use the only item in it as an int when calling the action
var ret = methodInfo.Invoke(Activator.CreateInstance(controllerType), new object[] { int.Parse(qscoll[0]) });

参数传递现在已内置,因此您需要根据参数名称和类型创建正确排序的参数数组。

关于.net - 如何仅在给定 uri 的情况下从另一个 Controller 方法调用一个 Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33463044/

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