如何在ASP.NET中创建无密钥URL参数

时间:2017-01-09 14:21:40

标签: c# asp.net query-string

我看到this answer描述了对无密钥(非无价值)参数的ASP.NET支持,例如http://some.url?param1&param2,并确认它们可以在Request.QueryString上查看,如:

var values = this.Request.QueryString.GetValues(null);
values.Any(o => o == "param1");

这很好,花花公子,但现在我想生成这样的网址。我的第一个直觉是使用RouteValueDictionary: routeValues的{​​{1}}参数,将null作为关键字:

Url.Action

但显然是C#forbids nulls as dictionary keys因为原因。

我还尝试将空字符串作为键,但它会生成一个查询字符串,如:@{ var dict = new RouteValueDictionary(); dict.Add(null, "param1"); dict.Add(null, "param2"); } <a href="@Url.Action("ActionName", dict)">Very link, amaze</a> ,其中包含2个我想要的等号。

当然我可以通过字符串操纵我的URL并将?=param1,=param2部分添加到查询字符串中,但我希望能有一个简洁的解决方案。

2 个答案:

答案 0 :(得分:1)

您想要添加键值,但不允许保留值null。

RouteValueDictionary ignores empty values

例如,你可以添加一个像1这样的值,但是你会丢失你的精细和花花公子的解决方案。

    @{
        var dict = new RouteValueDictionary();
        dict.Add("param1",1);
    }
    <a href="@Url.Action("Index", dict)">Very link, amaze</a>

对于另一种解决方案,您必须编写一些自定义代码。

答案 1 :(得分:0)

由于没有内置帮助器,为什么不自行动手:

public static class UrlHelperExtensions
{
    public static string MyAction(this UrlHelper urlHelper, string actionName, IList<string> parameters)
    {
        string url = urlHelper.Action(actionName);
        if (parameters == null || !parameters.Any())
        {
            return url;
        }

        return string.Format("{0}?{1}", url, string.Join("&", parameters));
    }
}

然后:

@{
    var parameters = new List<string>();
    parameters.Add("param1");
    parameters.Add("param2");
}

@Url.MyAction("ActionName", parameters)