Csharp/C#教程:如何获取将在给定请求时调用的控制器操作的MethodInfo?分享


如何获取将在给定请求时调用的控制器操作的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

(0)
上一篇 2022年2月3日
下一篇 2022年2月3日

精彩推荐