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"));

在我的实际逻辑中,我必须检查 QueryStringsearch是否存在,然后我将其删除并用新的搜索关键字替换它。

您可以按照逻辑应用它,并且第一个不起作用的示例代码是由于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 回答