如何在asp.net mvc中获取所有url参数?

时间:2017-06-03 17:00:27

标签: asp.net asp.net-mvc

我的测试网址:

localhost:61578/?type=promotion&foo=bar

我通常使用这种方式获取type参数的值:

public IActionResult Index(string type)
{
    // type = "promotion"
}

我的问题:如何检测网址中的所有参数?我想阻止访问带有一些未知参数的页面。

这样的事情:

public IActionResult Index(string type, string foo)
{
    if (!string.IsNullOrEmpty(foo))
    {
        return BadRequest(); // page 404
    }
}

问题是:我不确切知道用​​户输入的名称。所以,它可以是:

localhost:61578/?bar=baz&type=promotion

1 个答案:

答案 0 :(得分:4)

您可以使用HttpContext Type获取查询字符串

var context = HttpContext.Current;

然后,您可以获取整个查询字符串:

var queryString = context.Request.QueryString

// "bar=baz&type=promotion"

或者,您可以获得对象列表:

var query = context.Request.Query.Select(_ => new
{
    Key = _.Key.ToString(),
    Value = _.Value.ToString()
});

// { Key = "bar", Value = "baz" }
// { Key = "type", Value = "promotion" }

或者,你可以制作一本字典:

Dictionary<string, string>queryKvp = context.Request.GetQueryNameValuePairs()
    .ToDictionary(_=> _.Key, _=> _.Value, StringComparer.OrdinalIgnoreCase);

// queryKvp["bar"] = "baz"
// queryKvp["type"] = "promotion"