作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为简单起见,考虑一个人员资源,例如
{"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/
我是一名优秀的程序员,十分优秀!