删除一个查询参数值

时间:2018-05-09 20:19:25

标签: c# asp.net-web-api asp.net-core

是否可以以简单的方式删除1个查询参数值? (我正在考虑使用RouteValueDictionaryIUrlHelper.ActionContext.HttpContext.Request.Query重新创建没有我们想要删除的值的值列表,但我希望有一种更简单的方法。

示例:

原始查询:localhost:5555/search?cat=none&cat=cat1&cat=cat2

通缉查询(删除cat1):localhost:5555/search?cat=none&cat=cat2

1 个答案:

答案 0 :(得分:2)

在控制器的操作方法中执行此操作的一种方法是执行以下操作:

var queryParms = Request.GetQueryNameValuePairs();
在System.Net.Http命名空间中找到

GetQueryNameValuePairs is an extension method

queryParmsIEnumerable<KeyValuePair<string, string>>。要过滤它,您可以使用一些LINQ:

var queryParms = Request
    .GetQueryNameValuePairs()
    .Where(kvp => kvp.Key != "excluded key");

按键/值对过滤:

var queryParms = Request
    .GetQueryNameValuePairs()
    .Where(kvp => kvp.Key != "excluded key" && kvp.Value != "excluded value");

这为您提供了一个键/值对列表,不包括不需要的查询参数。如果要排除键列表,可以使用以上变体:

var excludedKeys = new[] { "excluded a", "excluded b", "etc" };
var queryParms = Request
    .GetQueryNameValuePairs()
    .Where(kvp => !excludedKeys.Contains(kvp.Key));

如果您需要更改替换查询参数值:

var queryParms = Request.GetQueryNameValuePairs();
var cat = queryParms.FirstOrDefault(x=> x.Key == "cat");
if (cat != null && cat.Value == "cat1")
{
    cat.Value = "none";
}
// other stuff with query parms

根据需要获得查询参数后,您需要重新构建网址。为此我转向你对另一个问题的一个非常好的答案:

https://stackoverflow.com/a/1877016/47589