7

ユーザーが正しいロールにいないため、403 の処理を​​担当するコントローラーとアクションがあります。RequestContext例外の原因となったオリジナルにアクセスできます。

私ができるようにしたいのは、アクションの説明でアクションを装飾し、ユーザーがマネージャーに通知して、電子メールの説明を含むアクセスを要求できるようにすることです。

では、与えられたアクションがどのように呼び出されるかをどのように判断できRequestContextますか?

RouteDataアクションメソッドなどのオーバーロードが頻繁にあるため、コントローラーとアクションの名前を取得するよりも明らかに複雑です。

を取得したらMethodInfo、属性などを簡単に取得できます。

4

3 に答える 3

11

ここに拡張メソッドがあります。コントローラー (パラメーターのないコンストラクター) で依存関係の挿入を行っている場合は、Activator.CreateInstance を使用するのではなく、リフレクションを使用してコントローラー コンストラクターを列挙するか、IOC コンテナーを使用してコントローラーをインスタンス化する必要があります。また、これを変更して、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;
    }
}
于 2012-07-18T22:01:12.150 に答える
2

レトロスペクティブに解決しようとするのは、おそらくリフレクションを使用して正しい方法を発見する必要があるため、ワームの缶詰のようなものですHttpContext.Items.失敗しますか?その後、 を介して処理方法から利用できるようになりますRequestContext.HttpContext.Items

于 2012-05-30T13:13:16.390 に答える
0

私は自分の質問に答えました。これはこれに非常に似ています。

これがまだあなたの興味を引くなら、もっと深く掘り下げることができるかもしれません。

私の質問は、あなたのような URL からではなく、コントローラーとアクションの名前、そして http メソッド (GET、POST...) から始まりました。

于 2012-10-24T08:05:35.783 に答える