Geo*_*ett 7 c# asp.net-mvc-routing asp.net-mvc-2
我有一个控制器和动作,负责处理403s,因为用户没有正确的角色.它可以访问RequestContext导致异常的原始文件.
我希望能够做的是用我们的行为描述装饰我的行为,然后允许用户通知他们的经理,请求访问,包括电子邮件中的描述.
那么,我怎么能弄清楚给定的动作是什么RequestContext?
显然,将控制器和动作名称排除在外是比较复杂的,RouteData因为通常会出现动作方法的重载等.
一旦我有了,MethodInfo那么很容易获得属性等.
Dev*_*ner 10
这是您的扩展方法.如果您在控制器上执行依赖注入(非参数构造函数),则需要使用反射枚举控制器构造函数,或者使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
试图回顾性地解决这个问题有点像蠕虫,因为您可能需要使用反射来发现正确的方法 - 将所需的数据插入到HttpContext.Items授权的代码的一部分中可能会更简单失败?然后可以通过您的处理方法使用它RequestContext.HttpContext.Items。
| 归档时间: |
|
| 查看次数: |
4287 次 |
| 最近记录: |