【问题标题】:How to create keyless URL parameters in ASP.NET如何在 ASP.NET 中创建无密钥 URL 参数
【发布时间】:2017-05-23 20:01:28
【问题描述】:

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

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

这很好,但现在我想生成这样的 url。我的第一个直觉是使用Url.ActionRouteValueDictionary: routeValues 参数,以null 作为键:

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

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

我也尝试将空字符串作为键,但它会产生一个查询字符串,例如:?=param1,=param2,其中包含我想要的另外 2 个等号。

当然,我可以对我的 URL 进行字符串操作,并将 &amp;param1 部分添加到查询字符串中,但我希望有一个简洁的解决方案。

【问题讨论】:

  • @2316116 您能否详细说明如何“使用路由”来创建我描述的 URL?
  • 路由通常使用 / 作为键和值之间的分隔符,并且 url 看起来像 server/url/param1/param2 - 所以如果使用 ?并且 & 不是必须使用的路由。
  • @2316116 我明白你的意思了。将是一个不错的选择,谢谢你的建议。

标签: c# asp.net query-string


【解决方案1】:

您想添加键值,但不允许将值留空。

RouteValueDictionary ignores empty values

例如,您可以添加一个像 1 这样的值,但您会失去您的精细和花哨的解决方案。

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

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

【讨论】:

  • 你能澄清一下吗?如果您指定 "param1" 键和 null 或 string.Empty 值,则 Url.Action 助手将不会在生成的 url 中包含此参数。或者我误解了你的意思?
  • 我认为它会起作用,但我编辑了我的答案,因为空值确实被忽略了。
  • 可悲的是,包含像 1 这样的占位符值正是我不想做的,这正是我问这个问题的原因。
【解决方案2】:

既然没有内置的帮助器,你为什么不自己动手:

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)

【讨论】:

  • 我推出了一款支持混合无键和键/值参数的产品。
猜你喜欢
  • 2014-08-16
  • 1970-01-01
  • 2018-09-19
  • 2021-05-08
  • 2020-04-15
  • 2011-04-29
  • 1970-01-01
相关资源
最近更新 更多