我在查询字符串中有很少的空路由值我想要:

var routeValues = new RouteValueDictionary();
routeValues.Add("one", "");
routeValues.Add("two", null);
routeValues.Add("three", string.Empty);
.

如果我将它传递给生成的,它忽略所有值,生成的查询字符串为空。但是,UrlHelper.RouteUrl()等URL完全有效。我该怎么办?

有帮助吗?

解决方案

此行为内置于默认路由类中。它调用进入parsedroute.bind()方法,在此检查:

if (IsRoutePartNonEmpty(obj2))
{
    acceptedValues.Add(key, obj2);
}
.

这是其中:

private static bool IsRoutePartNonEmpty(object routePart)
{
    string str = routePart as string;
    if (str != null)
    {
        return (str.Length > 0);
    }
    return (routePart != null);
}
.

如果它们为空,则有效地防止从输出的任何查询字符串值。它所做的一切都是私有,静态,内部,否则无法覆盖。因此,实际上只有2个选项来覆盖此行为。

  1. 子类路由和override getvirtualpath(),用自定义实现替换parsedroute.bind()。
  2. 子类RouteBase并创建自定义路由实现。
  3. 我猜第三个选项是留下它,因为其他人指出这不是一个真正的问题,因为查询字符串中的空参数很少或没有值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top