我可以使用Request.Url.Query自动删除查询字符串上的参数吗?

时间:2012-01-19 16:45:27

标签: c# .net

当我使用Request.Url.Query获取查询字符串时,我想排除一个参数(不使用替换或类似函数)。

所以,例如,如果我有这个查询字符串:

?ID=1241&IDL=241&HC=1241

我想排除IDL获取:

?ID=1241&HC=1241

这是一种实施方式还是我需要自己创作?

编辑:我关心查询字符串值的顺序。

2 个答案:

答案 0 :(得分:4)

它仍然是字符串操作,但是如下所示:

String.Concat("?",
    String.Join("&",
        Request.Url.Query.Substring(1)
            .Split('&')
            .Where(k => !k.StartsWith("IDL="))
            .ToArray() // For .NET versions prior to v4.0
     )
)

或者,您可以使用Request.QueryString来获取已处理的查询字符串参数集合。

编辑:这会使您的参数按发送顺序排列。

这是一个示例ASPX页面,它输出一个修改过的查询字符串(我在ASP.NET 3.5网站上测试过它):

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Import Namespace="System.Linq" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Query String Removal</title>
</head>
<body>
    Modified query-string: <%=
        String.Concat("?",
            String.Join("&",
                Request.Url.Query.Substring(1)
                    .Split('&')
                    .Where(k => !k.StartsWith("IDL="))
                    .ToArray() // For .NET versions prior to v4.0
             )
        )
    %>
</body>
</html>

注意: System.Linq已导入。如果未指定查询字符串,则会引发异常。

答案 1 :(得分:2)

我使用了这个,如果你有一个你想要从查询字符串中删除的键列表,如果它们存在,可以多次调用它:

private string RemoveQueryStringItemWithKeyName(string url, string keyName)
{
    var urlItemRemoved = String.Join("&", url.Split('&').Where(k => !k.StartsWith(keyName + "=")));
    return urlItemRemoved;
}