2016-03-31 4 views
0

ページ/コンテンツが配信される前にKentico 7でフィルタを実行する方法はありますか?Kenticoのリクエスト/ルートフィルタ7

私のシナリオでは、クエリ文字列パラメータを検証する必要があります。有効でない場合、クライアントは別のページにリダイレクトされます。私はこれがJavaScriptを使って簡単に行うことができることを知っていますが、あなたのブラウザでJSをオフにすれば、それを簡単に回避できます。

答えて

0

のようなCMSPages_PortalTemplateのイベントとそれ `sの基底クラスがあります。

protected override void OnPreRender(EventArgs e) 
    protected override void OnError(EventArgs e); 
    // 
    // Summary: 
    //  Init event handler. 
    protected override void OnInit(EventArgs e); 
    // 
    // Summary: 
    //  Load event handler. 
    protected override void OnLoad(EventArgs e); 
    // 
    // Summary: 
    //  PreInit event handler. 
    protected override void OnPreInit(EventArgs e); 
    // 
    // Summary: 
    //  PreRender event handler. 
    protected override void OnPreRender(EventArgs e); 
    // 
    // Summary: 
    //  Unload event handler. 
    protected override void OnUnload(EventArgs e); 
    // 
    // Summary: 
    //  Render event handler. 
    protected override void Render(HtmlTextWriter writer); 
    . 
    . 
    . 

をしかし、私はわからないと私はそれ` sにないベストプラクティスを疑います。たぶん、あなたはあなたの問題とどんなクエリーストリングを、なぜ、どこで検証したいのかを記述することができます。

+0

妥当性検査が必要な値があり、クエリ文字列から取得されます。検証が正しければページは正常に読み込まれ、そうでなければユーザーはリダイレクトされます。それはすべてあります。 – AnimaSola

0

私があなたのところにいる場合は、「RandomRedirection」のような単純なWebパーツを作成します。バージョン8の~/CMSWebParts/General/RandomRedirection.ascx.csにあるこのWebパーツのファイルのパスを次に示します。 Webパーツコードでクエリ文字列パラメータをテストし、に応じてリダイレクトを行うことができます。ここで

は(申し訳ありませんが、私は私のコードは、このバージョンではなく、バージョン8でテストされていませんので、バージョン7がローカルにインストールされていない)RandomREdirectionのWebパーツからインスピレーションを得たコードの例です

using System; 

using CMS.Helpers; 
using CMS.PortalControls; 
using CMS.PortalEngine; 

public partial class CMSWebParts_General_RandomRedirection : CMSAbstractWebPart 
{ 
    #region Webpart properties 

    /// <summary> 
    /// URL to redirect if the query value is not correct. 
    /// </summary> 
    public string RedirectionURL 
    { 
     get 
     { 
      return ValidationHelper.GetString(GetValue("RedirectionURL"), ""); 
     } 
     set 
     { 
      SetValue("RedirectionURL", value); 
     } 
    } 

    #endregion 


    #region Webpart methods 

    /// <summary> 
    /// Content loaded event handler. 
    /// </summary> 
    public override void OnContentLoaded() 
    { 
     base.OnContentLoaded(); 
     SetupControl(); 
    } 


    /// <summary> 
    /// Initializes the control properties. 
    /// </summary> 
    protected void SetupControl() 
    { 
     if (!StopProcessing) 
     { 
      if ((RedirectionURL.Trim().Length > 0) && 
       PortalContext.ViewMode.IsLiveSite()) 
      { 
       string newURL = URLHelper.ResolveUrl(RedirectionURL.Trim()); 
       if ((RequestContext.CurrentURL != newURL) && 
        (URLHelper.GetAbsoluteUrl(RequestContext.CurrentURL) != newURL)) 
       { 
        var value = QueryHelper.GetString("queryName", String.Empty); 
        //Test value of your query parameter 
        if (!value.Equals("queryValue")) 
        { 
         newURL = URLHelper.RemoveParameterFromUrl(newURL, "queryName"); 
         URLHelper.ResponseRedirect(newURL); 
        } 
       } 
      } 
     } 
    } 


    /// <summary> 
    /// Reloads the control data. 
    /// </summary> 
    public override void ReloadData() 
    { 
     base.ReloadData(); 
     SetupControl(); 
    } 

    #endregion 
} 

あなたを入れてあなたのマスターページのトップゾーンにあるWebパーツとここに行きます。

希望すると便利です。

関連する問題