1

次のクエリ文字列があり、クエリ文字列の一部を削除または更新したい

?language=en-us&issue=5&pageid=18&search=hawaii&search=hawaii// これは私がフォーマットする必要があるものです

問題は、検索キーのクエリ文字列が重複していることです。

次のコードを試しましたが、機能していません

public static string RemoveQueryStringByKey(string url, string key)
{
    var uri = new Uri(url);

    // this gets all the query string key value pairs as a collection
    var newQueryString = HttpUtility.ParseQueryString(uri.Query);

    // this removes the key if exists
    newQueryString.Remove(key);

    // this gets the page path from root without QueryString
    string pagePathWithoutQueryString = uri.GetLeftPart(UriPartial.Path);

    return newQueryString.Count > 0
        ? "{0}?{1}".FormatWith(pagePathWithoutQueryString, newQueryString)
        : pagePathWithoutQueryString;
}

FormatWith エラーが発生する

string' does not contain a definition for 'FormatWith' and no extension method 'FormatWith' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?

作業コード:

public static string RemoveQueryStringByKey(string url, string key)
{
    var uri = new Uri(url);

    // this gets all the query string key value pairs as a collection
    var newQueryString = HttpUtility.ParseQueryString(uri.Query);

    // this removes the key if exists
    newQueryString.Remove(key);

    // this gets the page path from root without QueryString
    string pagePathWithoutQueryString = uri.GetLeftPart(UriPartial.Path);

    return newQueryString.Count > 0
        ? string.Format("{0}?{1}", pagePathWithoutQueryString, newQueryString)
        : pagePathWithoutQueryString;
}

関数呼び出し

var URL = Request.Url.AbsoluteUri;
var uri = new Uri(Helper.RemoveQueryStringByKey(URL, "search"));

私の実際のロジックsearchでは、QueryString が存在するかどうかを確認する必要があります。存在する場合は、それを削除して新しい検索キーワードに置き換えます。

ロジックに従って適用できます。機能していなかった最初のコード例はFormatWith、修正できなかったために修正できなかったため、私にとって機能するソリューション提供を使用Odedしました。

4

2 に答える 2

4

string.Format直接使用してください。FormatWithコピーしていない (または存在する名前空間を含めていない) 拡張メソッドを定義するコード ベースからコードをコピーしたようです。

使用string.Format:

return newQueryString.Count > 0
    ? string.Format("{0}?{1}", pagePathWithoutQueryString, newQueryString)
    : pagePathWithoutQueryString;

拡張メソッドがコードベースにある場合の別のオプションは、拡張メソッドがある名前空間でusing宣言を追加することです。

于 2013-02-24T13:00:23.767 に答える
0
return newQueryString.Count > 0
        ? "{0}?{1}".FormatWith(pagePathWithoutQueryString, newQueryString)
        : pagePathWithoutQueryString;

string' には 'FormatWith' の定義が含まれておらず、タイプ 'string' の最初の引数を受け入れる拡張メソッド 'FormatWith' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?

エラーは一目瞭然だと思います。戻りコードにエラーがあります。
文字列オブジェクトに FormatWith がありません。


QueryStrings は、キーと値のコレクションを返すRequest.QueryStringで収集することもできます。このコレクションを変更してから、Response.QueryString で再送信すると、必要なことが行われる場合があります。

于 2013-02-24T12:58:51.257 に答える