3

質問: 呼び出されたアクションが期待するパラメーターのタイプを知ることは可能ですか? たとえば、次のようなものがあり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 つの予想されるパラメーターがあります。1 つは typeintで、もう 1 つは typestringです。

実際の目的: 実際には の値を変更する必要があります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何とか役立つかもしれませんか?

重要:私は提案を受け入れます。私のアプローチが実際の目的を達成するのに適していない場合、またはそれを行うためのより良い方法がある場合は、共有してください;)

4

1 に答える 1