System.Web.HttpException: «<url with queystring>» не является пустым путем

1

У меня есть следующий вспомогательный метод:

    public static String ResolveUrl(String url)
    {
        url = url.Trim();
        if (!(url[0] == '~')) return url;
        try
        {
            if (VirtualPathUtility.IsAppRelative(url)) return VirtualPathUtility.ToAbsolute(url);
            return url;
        }
        catch (HttpException)
        {
            return url;
        }
    }

Проблема в том, что он вызывает исключение, если предоставленный URL-адрес содержит запрос, например. ~/showcase/View.aspx?id=10783.

Трассировки стека:

System.Web.HttpException was caught
  Message='~/showcase/View.aspx?id=10783' is not a valid virtual path.
  Source=System.Web
    ErrorCode=-2147467259
    StackTrace:
         at System.Web.VirtualPath.Create(String virtualPath, VirtualPathOptions options)
         at System.Web.VirtualPathUtility.IsAppRelative(String virtualPath)
         at Ctf.Common.ResolveUrl(String url) in [redacted]Common.cs:line 359
    InnerException: 

В чем проблема? Ли VirtualPathUtility просто не поддерживает URL-адреса с запросами?

Изменение: я должен добавить, что помощник отлично справляется с другими URL-адресами, связанными с приложениями, если на них нет ни одного запроса.

Edit2: я сделал обходное решение, удалив запрос из URL-адреса, прежде чем вызывать методы VirtualPathUtility, а затем приклеивать его обратно в конце. Я бы предпочел избежать этого, если это возможно.

  • 2
    возможно, он ожидает абсолютный URL и отклоняет ваш, так как у него нет http://example.com/~.... ?
  • 0
    Весь смысл VirtualPathUtility.IsAppRelative заключается в том, чтобы определить, является ли URL-адрес относительным к приложению путем, т.е. начинается с ~/ .
Теги:

1 ответ

0
Лучший ответ

Если вы используете.NET 3.5 и ниже, то вы правы, VirtualPathUtility не примет строку запроса как действительную часть виртуального пути для этих методов. Вам придется обрезать строку запроса и повторно добавить ее на ваш абсолютный URL. Проверьте этот отличный вопрос/ответ. Почему я получаю HttpException из VirtualPathUtility ToAbsolute с некоторыми путями? ,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню