如何获取将在给定请求时调用的控制器操作的MethodInfo?
我有一个控制器和动作,负责处理403s,因为用户没有正确的角色。 它可以访问导致exception的原始RequestContext
。
我希望能够做的是用我们的行为描述装饰我的行为,然后允许用户通知他们的经理,请求访问,包括电子邮件中的描述。
那么, 在给出RequestContext
, 如何确定将调用哪些操作?
显然,将控制器和动作名称从RouteData
取出会更加复杂,因为通常会出现动作方法的重载等。
一旦我有MethodInfo
那么很容易获得属性等。
试图回顾一下它是一种蠕虫,因为你可能需要使用reflection来发现正确的方法 – 将所需数据作为代码的一部分插入HttpContext.Items
可能更简单授权失败的地方? 然后,您可以通过RequestContext.HttpContext.Items
从您的处理方法中获取它。
这是您的扩展方法。 如果您正在对控制器进行dependency injection(非参数构造函数),则需要使用reflection枚举控制器构造函数,或者使用IOC容器来实例化控制器,而不是使用Activator.CreateInstance。 此外,这可以修改为很容易使用类似的上下文,如ExceptionContext或HttpContext。
public static class RequestContextExtensions { public static MethodInfo GetActionMethod(this RequestContext requestContext) { Type controllerType = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(x => x.Name == requestContext.RouteData.Values["controller"].ToString()); ControllerContext controllerContext = new ControllerContext(requestContext, Activator.CreateInstance(controllerType) as ControllerBase); ControllerDescriptor controllerDescriptor = new ReflectedControllerDescriptor(controllerType); ActionDescriptor actionDescriptor = controllerDescriptor.FindAction(controllerContext, controllerContext.RouteData.Values["action"].ToString()); return (actionDescriptor as ReflectedActionDescriptor).MethodInfo; } }
我已经回答了我自己的问题,这与此非常相似。
如果这仍然是你的兴趣,也许我可以深入研究它。
我的问题不是从你的URL开始,而是从控制器和动作名称开始,还有http方法(GET,POST …)。
上述就是C#学习教程:如何获取将在给定请求时调用的控制器操作的MethodInfo?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1044216.html