문제

쿼리 문자열에 원하는 빈 경로 값이 거의 없습니다.

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

그런 다음 그것을 전달하면 UrlHelper.RouteUrl() 모든 값을 무시하고 생성된 쿼리 문자열은 비어 있습니다.그러나 다음과 같은 URL은 /?one=&two=&three= 완벽하게 유효합니다.어떻게 해야 합니까?

도움이 되었습니까?

해결책

이 동작은 기본 Route 클래스에 내장되어 있습니다.이 검사를 수행하는 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);
}

이렇게 하면 쿼리 문자열 값이 비어 있는 경우 출력되는 것을 효과적으로 방지할 수 있습니다.그것이 하는 모든 일은 비공개적이고, 정적이며, 내부적이며, 그렇지 않으면 재정의가 불가능합니다.따라서 이 동작을 재정의할 수 있는 옵션은 실제로 두 가지뿐입니다.

  1. Route를 서브클래스화하고 GetVirtualPath()를 재정의하여 ParsedRoute.Bind()를 사용자 정의 구현으로 바꿉니다.
  2. RouteBase를 하위 클래스로 분류하고 사용자 정의 경로 구현을 만듭니다.

세 번째 옵션은 그대로 두는 것입니다. 다른 사람들이 지적했듯이 쿼리 문자열에 빈 매개 변수가 있으면 값이 거의 또는 전혀 없기 때문에 이는 실제로 문제가 되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top