2012-01-25 11 views
5

フルWebアプリケーションを開発しており、ASP.NET MVC 3フレームワークを使用しています。私はActionFilterAttributeのサブクラスを実装しています。RedirectResult + URLのパラメータとしてのオブジェクト

私はOnActionExecutingメソッドをオーバーライドしています。 OnActionExecutingメソッドで例外が検出された場合は、クライアントブラウザをリダイレクトします。リダイレクトURLは、自分のコントローラの1つのアクションメソッドを対象としています。 ExceptionオブジェクトのデータをリダイレクトURLに渡したいとします。

Exceptionオブジェクトを含むURLを作成し、そのURLをRedirectResultコンストラクタに渡す方法はありますか?

答えて

7

例外オブジェクトを含むURLを構築し、 のURLをRedirectResultコンストラクタに渡す方法はありますか?あなたは、例えばのような唯一のクエリ文字列パラメータを渡すことができ

番号:

var values = new RouteValueDictionary(new 
{ 
    action = "foo", 
    controller = "bar", 
    exceptiontext = "foo bar baz" 
}); 
filterContext.Result = new RedirectToRouteResult(values); 

とターゲットアクションで使用すると、例外テキストのパラメータを取得することができるようになります:

public Action Foo(string exceptionText) 
{ 
    ... 
} 
+0

例外オブジェクトをクエリ文字列に変換する方法はありますか?次に、クエリ文字列をRouteValueDictionaryのコンストラクタにキーの値として渡します。ターゲットのアクションメソッドは、入力パラメータとしてExceptionオブジェクトを使用します。 – user1139666

+0

@ user1139666、いいえ、クエリ文字列パラメータとして興味のあるプロパティのみを含める必要があります。 –

2

Aより良い解決策は、[HandleError]属性を使用することです。この属性の機能は、エラーが発生した場合にエラービューが表示されます。動作する方法は、エラーが発生したときです。[HandleError]属性が存在する場合、ASP.NET MVCはまずコントローラのビューフォルダでエラービューを探し、次に共有ビューフォルダでエラービューを探します。例えば

:エラーがFooControllerのための任意のアクションで発生した場合、ASP.NET MVCは、最初のエラー表示のために〜/ビュー/ Fooの中で

[HandleError] 
public class FooController : Controller { 
    ... 
} 

検索します(Error.aspxの名前付きビューASP.NETビューエンジン、かみそりビューエンジンのError.cshtml)。そのビューが見つからない場合は、〜/ Views/Sharedを検索します。

一般的なエラーを表示したり、例外情報を表示したりすることができます。

[HandleError]属性の詳細については、http://blogs.msdn.com/b/gduthie/archive/2011/03/17/get-to-know-action-filters-in-asp-net-mvc-3-using-handleerror.aspxを参照してください。

3

このような状況では、TempDataを使用できます。

リダイレクトする前にTempData["MyException"] = myExceptionに設定してから、リダイレクトする操作でそのTempData値を確認してください。

関連する問題