rutevalueictice忽略了空值
-
21-12-2019 - |
题
我在查询字符串中有很少的空路由值我想要:
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个选项来覆盖此行为。
- 子类路由和override getvirtualpath(),用自定义实现替换parsedroute.bind()。
- 子类RouteBase并创建自定义路由实现。
我猜第三个选项是留下它,因为其他人指出这不是一个真正的问题,因为查询字符串中的空参数很少或没有值。
不隶属于 StackOverflow