gpt4 book ai didi

c# - 我怎样才能得到 Controller 操作的 MethodInfo,它将根据请求被调用?

转载 作者:太空狗 更新时间:2023-10-29 20:05:38 26 4
gpt4 key购买 nike

我有一个 Controller 和操作负责处理由于用户角色不正确而导致的 403。它可以访问导致异常的原始 RequestContext

我希望能够做的是用他们所做的描述来装饰我的行为,然后允许用户通知他们的经理,请求访问权限,包括在电子邮件中的描述。

那么,在给定 RequestContext 的情况下,我如何确定将调用什么操作?

显然,这比从 RouteData 中获取 Controller 和 Action 名称要复杂得多,因为经常会重载 Action 方法等。

一旦我有了MethodInfo,就很容易获得属性等。

最佳答案

这里有一个扩展方法供您使用。如果您在 Controller (非无参数构造函数)上进行依赖注入(inject),则需要使用反射枚举 Controller 构造函数,或使用 IOC 容器实例化 Controller ,而不是使用 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;
}
}

关于c# - 我怎样才能得到 Controller 操作的 MethodInfo,它将根据请求被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814147/

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