代码之家  ›  专栏  ›  技术社区  ›  Zeeshan

在OnActionExecuting中获取预期的操作参数类型

  •  3
  • Zeeshan  · 技术社区  · 10 年前

    问题: 是否可以知道所调用的操作所期望的参数类型?例如,我有一些 action 作为:

    [TestCustomAttr]
    public ActionResult TestAction(int a, string b)
    {
        ...
    

    TestCustomAttr 定义为:

    public class TestCustomAttr : System.Web.Mvc.ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            ...
    

    所以,当电话打到 TestAction ,这里,里面 OnActionExecuting ,我想知道 测试操作 方法(例如:在本例中,有两个预期参数。一个是类型 int 另一个是类型 string .

    实际用途: 实际上,我需要改变 QueryString 。我已经能够获取querystring值(通过 HttpContext.Current.Request.QueryString ),更改它,然后手动将其添加到 ActionParameters filterContext.ActionParameters[key] = updatedValue;

    问题: 当前,我尝试将值解析为 整数 ,如果成功解析,我假设它是 整数 ,所以我进行了所需的更改(例如值+1),然后将其添加到操作参数中,与键相对。

     qsValue = HttpContext.Current.Request.QueryString[someKey].ToString();
    
     if(Int32.TryParse(qsValue, out intValue))
     {
         //here i assume, expected parameter is of type `int`
     }
     else
     {
         //here i assume, expected parameter is of type 'string'
     }
    

    但我想知道确切的预期类型。因为 一串 可以是 "123" ,假设为 整数 并作为整数参数添加,导致其他参数出现null异常。(反之亦然)。因此,我希望将更新后的值解析为准确的预期类型,然后根据其键添加到操作参数中。那么,我该怎么做呢?这是可能的吗?可能是 Reflection 有什么帮助吗?

    重要: 我愿意接受建议。如果我的方法不能达到实际目的,或者如果有更好的方法,请分享;)

    1 回复  |  直到 10 年前
        1
  •  6
  •   Fedri Qrueger    10 年前

    您可以从ActionDescriptor获取参数。

    public class TestCustomAttr : System.Web.Mvc.ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var ActionInfo = filterContext.ActionDescriptor;
            var pars = ActionInfo.GetParameters();
            foreach (var p in pars)
            {
    
               var type = p.ParameterType; //get type expected
            }
    
        }
    }
    
    推荐文章