在 OnActionExecuting 中获取预期的动作参数类型
Get expected Action Parameter type in OnActionExecuting
问题:
是否有可能知道被调用的操作所期望的参数类型?例如,我有一些 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
并添加为整数参数,导致 null 异常,对于其他参数。 (反之亦然)。因此,我想将更新后的值解析为准确的预期类型,然后根据其键添加到操作参数中。那么,我该怎么做呢?这可能吗?可能 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
}
}
}
问题:
是否有可能知道被调用的操作所期望的参数类型?例如,我有一些 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
并添加为整数参数,导致 null 异常,对于其他参数。 (反之亦然)。因此,我想将更新后的值解析为准确的预期类型,然后根据其键添加到操作参数中。那么,我该怎么做呢?这可能吗?可能 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
}
}
}