在“操作执行”中获取预期的操作参数类型



问题:是否可以知道被调用的操作所需的参数类型?例如,我有一些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里面,我想知道TestAction方法期望的类型。(例如:在这种情况下,有 2 个预期参数,一个是 int 类型,另一个是 string 类型。

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

问题:目前,我尝试将值解析为 int,如果成功解析,我假设它是一个int,所以我进行了所需的更改(例如值 + 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'
 }

但我想知道确切的预期类型。 因为string可以像"123"一样,并且会假定它被int并添加为整数参数,导致其他参数出现空异常。(反之亦然)。因此,我想将更新的值解析为确切的预期类型,然后针对其键添加到操作参数。那么,我该怎么做呢?这可能吗?也许Reflection可以以某种方式提供帮助?

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

您可以从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
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新