2012-03-30 15 views
0

私は自分のデータベーステーブルを使用するASP.NETメンバーシップのカスタム実装を行っています。すべてが正常に機能しますが、請求書を支払っていない顧客を支払いページにリダイレクトする必要があります。これは、ログイン時だけでなく、既にログインしているユーザーに対しても行われるべきです。そのため、ユーザーがログインしているときに請求書が「未払い」として登録されている場合、そのユーザーは次回に支払いページにリダイレクトする必要がありますページを読み込みます。ASP.NETメンバーシップ - 未払いの請求書を持つユーザーのリダイレクト

これはできますか?

答えて

2

私はHttpModuleを使ってこれに似たことをしました。あなたがしたいことは、PreRequestイベントを処理し、それが認証されている場合は、未払いの請求書チェックを行い、必要に応じてリダイレクトします。

protected void OnPreRequestHandlerExecute(object sender, EventArgs e) 
{ 
    if (HttpContext.Current.Request.Path != "/UnPaid.aspx" && HttpContext.Current.User != null) 
     { 
      if (HttpContext.Current.User.Identity.IsAuthenticated) 
      { 
       // You don't want to make this check for every resource type 
       bool isPage = HttpContext.Current.Request.Path.EndsWith(".aspx") || HttpContext.Current.Request.Path == "/"; 
       if (isPage) 
       { 
        bool isPaid = false; // Make isPaid check here 
        if (!isPaid) 
        { 
         // Optional pass ina return url for after the invoice is paid 
         string returnUrl = HttpUtility.UrlEncode(HttpContext.Current.Request.RawUrl, HttpContext.Current.Request.ContentEncoding); 

         HttpContext.Current.Response.Redirect(string.Concat("/UnPaid.aspx?ReturnUrl=", returnUrl), true); 
        } 
       } 
      } 
     } 
    } 
2

私はこの情報をメンバーシッププロバイダに知らせません。セキュリティモデルではなく、これを知ることはアプリケーションの仕事です。 は、役割を追加/削除するだけで簡単ですが、理想的ではありません。

2

あなたはので、多分あなたは、いくつかのより多くのチェックを追加することができますし、本当に速いそれを作る、これはすべてのページに呼び出されたApplication_AuthenticateRequest

protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
{ 
     string cTheFile = HttpContext.Current.Request.Path; 

     if(!cTheFile.EndsWith("ThePaymentPage.aspx")) 
     {   
      if(HttpContext.Current.User != null 
      && HttpContext.Current.User.Identity != null 
       && HttpContext.Current.User.Identity.IsAuthenticated) 
      { 
       // check here if need to redirect or not. 
       if(NeedPayment()) 
       { 
       HttpContext.Current.Responce.Redirect("ThePaymentPage.aspx"); 
       } 
      } 
     } 
} 

を使用してglobal.asaxにそれを行うことができます。ページが終了するとその他のチェックが可能です

0

どのように継承していますか。 PageクラスとASPXコードビハインドクラスの間にBasePageを「挿入」することができます。 このようにすると、ビジネスロジッククラスにアクセスできるようになります。次に、各リクエストごとに、ユーザーのリダイレクト先を決めることができます。

私は、このロジックをセキュリティモデルではなくアプリケーションのビジネスロジックで処理する必要があるという点についても同意します。

これが役に立ちます。

関連する問題