0

サーバーがダウンしているときに、単純なビューをレンダリングする必要があります。サーバー接続をチェックするグローバル フィルターがあります。サーバーが存在する場合にビューを表示するには、フィルター内でリダイレクトを実行する必要があります。問題は、コントローラーへのリダイレクトが発生しないことです。フィルター内のコードが数回実行された後、ブラウザーでリクエストが多すぎるというエラーが発生します。画像またはテキストにリダイレクトすると、すべてうまくいきます。しかし、ビューをレンダリングすることはできません。

グローバル フィルター:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    using (var connection = new SqlConnection ConfigurationManager.ConnectionStrings["IncbbsConnection"].ToString()))
    {
        try
        { connection.Open(); }
        catch (SqlException)
        {
            // This works, the text shows:
            //var content = new ContentResult {Content = "Server down!", ContentType = "text/plain"};
            // filterContext.Result = content;

            // This works, the image appears:
            //filterContext.Result = new RedirectResult("~/Content/images/LoginLogo1.png");

            // doesn't perform redirect to a controller  
            filterContext.Result = new RedirectToRouteResult("ServerDown",new RouteValueDictionary(new controller = "Error", action = "ServerDownView"}));
        }

        finally
        { connection.Close(); }
    }
}
4

2 に答える 2

0

これは問題のある行ではありませんか?

filterContext.Result = new RedirectToRouteResult("ServerDown",new RouteValueDictionary(new controller = "Error", action = "ServerDownView"}));

次のように変更してみてください。

filterContext.Result = new RedirectToRouteResult("ServerDown",
   new RouteValueDictionary(
   new 
   {
       controller = "Error", 
       action = "ServerDownView"
   })
);

私が見る限り、{開始タグがありません。


そうでない場合は、ルーティングの問題ですか。

その RedirectToRouteResult コンストラクターのオーバーロードがさらにあります。選択したものは、RouteName に追加しています。つまり、そのルートが存在する必要があります。

http://msdn.microsoft.com/en-us/library/dd493020(v=vs.108).aspx

それが問題の場合は、ルート名を削除してください:

filterContext.Result = new RedirectToRouteResult(
   new RouteValueDictionary(
   new 
   {
       controller = "Error", 
       action = "ServerDownView"
   })
);
于 2013-07-22T09:30:10.713 に答える