System.Web.HttpException:&#39; <url with =“”queystring =“”>&#39;不是一个虚假的道路</url>

时间:2014-08-20 20:17:25

标签: c# asp.net

我有以下帮助方法:

    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完全没问题。

Edit2:我通过在调用VirtualPathUtility方法之前从URL中删除查询字符串,然后在最后粘贴它来制作黑客解决方法。如果可能的话,我宁愿避免这种情况。

1 个答案:

答案 0 :(得分:1)

如果您使用的是.NET 3.5及更低版本,那么您是对的,VirtualPathUtility将不接受查询字符串作为这些方法的虚拟路径的有效部分。您必须修剪查询字符串并将其重新附加到绝对URL上。看看这个优秀的问题/答案Why do I get an HttpException from VirtualPathUtility ToAbsolute with some paths?