0

ActionFilterAttribute前のページに戻るためのリンクを含むエラー画面にユーザーを送信するカスタムクラスがあります。

この属性は、2つのコントローラー/アクションのペアを受け入れます。1つはエラー画面アクション(通常はアプリケーション全体で同じ)用で、もう1つはリターンアクション(通常はコントローラー内のすべてのアクションで同じ)用です。エラーが発生したときに、ユーザーがアプリケーションに戻る方法がないために、ユーザーが迷子になったと感じたくないという考え方です。

現在、4つのプロパティがあります。2つはコントローラー名用で、2つはアクション名用です。アプリケーションで2つのアクションをハードコーディングした方法が気に入らない。それらにフレンドリーなデフォルトがあると便利です。デフォルトのエラーアクションをグローバルに指定できるようにしたい。

したがって、いくつかの質問があります。

  • 属性が参照できるルートをグローバルに構成するにはどうすればよいですか?
  • デフォルトをオーバーライドする必要がある場合、コントローラー/アクションのペアを参照するための最良の方法は何ですか?

属性であることに伴う問題の1つは、属性へのすべてのパラメーターが一定でなければならないことです。だから私はそのようなものを計算することはできませんActionResult

4

1 に答える 1

1

次のように RouteConfig でルートを定義できます。

routes.MapRoute(
                name: "Error",
                url: "error/generalerror",
                defaults: new { controller = "Error", action = "GeneralError" },
                namespaces: new[] { "YourApplication.namespace" }
            );
routes.MapRoute(
                name: "CustomError",
                url: "error/customerror",
                defaults: new { controller = "Error", action = "CustomError" },
                namespaces: new[] { "YourApplication.namespace" }
            );

次に、ActionFilterクラスでデフォルトの2つのコンストラクターを使用できます

public YourFilterAttribute()
 : this("Error")
{}

public YourFilterAttribute(string route)
{
//store route in some class variable
}

そうすれば、ほとんどのクラスは次のように属性を使用し[YourFilter]、カスタムルートが必要なクラスはそれを使用します:[YourFilter("CustomError")]

そうすれば、一般的なルートは、実際に属するクラスで一度だけハードコーディングされます。もちろん、カスタム エラー ルートの場合は、いくつかの定数文字列を作成して、コードをさらにきれいにすることができます

于 2013-03-15T18:13:36.893 に答える