2011-06-17 16 views
0

私は現在の日付に基づいてユーザーをページにリダイレクトする最良の方法を探しています。正確に私が達成しようとしているのは、以下のコードです。ASP.NET MVCの日付に基づいてサイトをリダイレクトするにはどうすればよいですか?

DateTime Today = DateTime.Now; 
DateTime LaunchDate = DateTime.Parse("17/06/11"); 
DateTime CloseDate = DateTime.Parse("19/06/11"); 

int isClosed = DateTime.Compare(CloseDate, Today); 
int isOpen = DateTime.Compare(LaunchDate, Today); 

if (isClosed < 0){ 
    return RedirectToAction("Closed", "Home"); 
} 
else if (isOpen > 0){ 
    return RedirectToAction("Index", "Home"); 
} 
else{ 
    return RedirectToAction("ComingSoon", "Home"); 
} 

ここで、global.asax(またはそれは可能ですか)ではこの条件になりますか?

答えて

0

これは私が同様の要件で使用するコードで、テストを簡単にするための追加機能がいくつかあります。特定のページを起動する前に利用できるように、コントローラ/アクションに個別に適用することを好みますが、グローバルフィルタとして設定することもできます。

これは、RedirectResultではなくViewResultを返します。これにより、元のURLが維持されます。つまり、適切な役割を持つ人物がプレースホルダページからログインした場合、最初に要求したURLにリダイレクトできます。

public sealed class PreviewAuthAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 

     // todo: if site is live, show page 
     if (DataStore.Instance.Settings.Get("islive") == "True") return; 

     // if request is from localhost or build server, show page 
     if (filterContext.HttpContext.Request.IsLocal) return; 
     if (filterContext.HttpContext.Request.UserHostAddress.StartsWith("192.168.0")) return; 

     // if user has has beta role, show page 
     if (filterContext.HttpContext.Request.IsAuthenticated && (filterContext.HttpContext.User.IsInRole("Beta"))) return; 


     // site is not live and user does not have access - show placeholder 

     filterContext.Result = new ViewResult() 
     {     
      ViewName="Placeholder", 
      ViewData = filterContext.Controller.ViewData, 
      TempData = filterContext.Controller.TempData 
     }; 
    } 

} 
2

カスタムMvcHandlerにコードを挿入します。

あなたはそれをActionFilterに入れることができますが、すべてのアクションに適用する必要があります。

0

これはglobal.asaxでは行いませんが、これを設定して登録したルートを把握できます。 「サイト」全体がすぐに開かれ、閉じられると仮定します。この方法の問題は、あなたのケースでうまくいけば、誰かが周りを遊んで回避することができます。おお!

私が入力していたときに、JakubがHandlerでポップアップしました。これは良いオプションです。あなたが望むもの以外のページは見えないように設定することができます。これはあなたが望むように聞こえるものです。

0

IRouteConstraintを実装することでカスタムルート制約を作成できます。 matchメソッド内で、チェックしたいdatetimeのロジックを追加することができます。これには、あなたのルーティングテーブルに複数のルートが必要です。これらはすべて、ユーザーに異なるビューを表示できる異なるコントローラー/アクションを指します。

以下のURLにカスタムRouteConstraintの実装方法に関するサンプルが多数掲載されています。 http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx

関連する問題