0

現在のページの URL が (http://mysite/english/faq.aspx?faqid=12123&cid=4545&intcid=65456&h=man) になっているとします。

string excludeQuerystring = DynConfig.Item("GoogleSEOLinkSettings/ExcludeQuerystring"); //this is the list of my exclude querystring (cid,intcid,del)

querystring = HttpContext.Current.Request.Url.AbsoluteUri.Split('?')[1]; //I will get faqid=12123&cid=4545,intcid=65456

StringBuilder fullQueryString = new StringBuilder();

if (!string.IsNullOrEmpty(excludeQuerystring) && !string.IsNullOrEmpty(querystring))
{
    string[] strEQ = excludeQuerystring.Split(',');  //making a array of excluded querystrings

    NameValueCollection navValues = HttpUtility.ParseQueryString(querystring);  //getting the list of querystring in NameValueCollection

    if (navValues.Count > 0)
    {
        string[] strQ = navValues.AllKeys;
        if(strQ.Length>0)
        {

        }
    }
}   

querystring= ?+faqid=12123&h=man //here I want updated querystring which does not have any querystring which is there in my excludeQuerystring

これを取得する方法がわかりません。実際には、これをすべて実行する関数を作成したいと考えています。

提案してください!!

編集:

上記の問題を解決するために新しいコードを適用しましたが、NameValueCollection を再度クエリ文字列に変換する際にほとんどスタックしませんでした。

 protected void Page_Load(object sender, EventArgs e)
        {
            string querystring = string.Empty;

            string excludeList = "cid,intcid,del";

            if (!string.IsNullOrEmpty(excludeList))
            {
                string getFinalString = GetQueryString(excludeList);
                getFinalString = "?" + getFinalString;
            }
        }

        public string GetQueryString(string excludeArray)
        {
            string retQueryString = string.Empty;
            if (excludeArray.IndexOf(",") != -1)
            {
                string[] strArray = excludeArray.Split(",".ToCharArray());
                NameValueCollection filtered = new NameValueCollection();

                filtered.Add(HttpUtility.ParseQueryString(Request.Url.Query));
                if (filtered.HasKeys())
                {
                    foreach (string strMatch in strArray)
                    {
                        filtered.Remove(strMatch);
                    }
                    retQueryString = filtered.ToString(); //Here I am not able to convert back to querystring, however there are other ways to get it like (http://leekelleher.com/2008/06/06/how-to-convert-namevaluecollection-to-a-query-string/), is there any other way to do that
                }
            }

            return retQueryString;
        }
4

3 に答える 3

1

以下は、私が得た完璧なソリューションです。これに関するコメントはありません。

string excludeList = "cid,intcid,del";

string getFinalString = Regex.Replace(Regex.Replace(Regex.Replace(Request.Url.Query, @"^\?", "&"), "&(" + excludeList.Replace(",", "|") + ")=[^&]*", "", RegexOptions.IgnoreCase), "^&", "?");
于 2012-05-25T09:17:44.260 に答える
0

以下のようにクエリ文字列を直接削除することはできません。

Request.QueryString.Remove("foo")

これを行うと、エラーが発生します-コレクションは読み取り専用です。したがって、クエリ文字列を削除する前に、以下のコードを記述する必要があります。

C#の場合:

PropertyInfo isreadonly = 
typeof(System.Collections.Specialized.NameValueCollection).GetProperty(
 "IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
 // make collection editable
 isreadonly.SetValue(this.Request.QueryString, false, null);
 // remove
 this.Request.QueryString.Remove("foo");

これがお役に立てば幸いです!!

于 2012-05-24T10:02:54.303 に答える
0

はい、2 つの配列を比較する方法があります

        var array1 = new byte[] { 1, 2, 5, 4 };
        var array2 = new byte[] { 1, 2, 3, 4 };

        var areEqual = array1.SequenceEqual(array2); //return boolean value True or False
于 2012-05-25T06:49:03.997 に答える