Url不是有效的虚拟路径

本文关键字:虚拟 路径 有效 Url | 更新日期: 2023-09-27 18:24:28

我有一个超链接,它传递变量。这是使用字符串和服务器属性的组合生成的。然而,它似乎对一些变量有效,但对其他变量无效。

如果我传递groupId和issuedMemberId,那就没问题了。

<asp:HyperLink runat="server" ID="groupUrlLink" NavigateUrl=<%# string.Concat("~/UpdateMember.aspx?groupId=", DataBinder.Eval(Container.DataItem, "GroupID").ToString(),"&issuedMemberId=", DataBinder.Eval(Container.DataItem, "IssuedMemberId").ToString()%> >

但是,如果我使用不同的变量,有效日期,

<asp:HyperLink runat="server" ID="groupUrlLink" NavigateUrl=<%# string.Concat("~/UpdateMember.aspx?groupId=", DataBinder.Eval(Container.DataItem, "GroupID").ToString(),"&effectiveDate=",DataBinder.Eval(Container.DataItem, "EffectiveDate").ToString())%> >

我得到一个错误:

'~/UpdateMember.aspx?groupId=0032409901&生效日期=2008年3月31日"12:00:00 AM"不是有效的虚拟路径。

从错误中可以看出,它正确地使用了"生效日期"的值。这是唯一一个与第一个例子不同的地方,所以我不知道为什么它现在不起作用。

Url不是有效的虚拟路径

可能是正斜杠(在URL的参数部分)或空格。它不是URL的有效字符。

使用HttpUtility.UrlEncode对URL进行编码。或者按照下面的注释指定。

传递DateTime时使用HttpUtility.UrlEncodeTicks。我建议您在查询字符串中传递DateTime时传递Ticks。CCD_ 7是可以转换为CCD_ 8的长数据类型。

<asp:HyperLink runat="server" ID="groupUrlLink" NavigateUrl=<%# string.Concat("~/UpdateMember.aspx?groupId=", DataBinder.Eval(Container.DataItem, "GroupID").ToString(),"&effectiveDate=",DataBinder.Eval(Container.DataItem, "EffectiveDate").Ticks.ToString())%> >

为了增加上面的答案,OP可能应该使用WebUtility.HttpEncode(...)调用传递给Hyperlink:的NavigateUrl属性的字符串

<asp:HyperLink runat="server" ID="groupUrlLink" NavigateUrl=<%# WebUtility.UrlEncode(string.Concat("~/UpdateMember.aspx?groupId=", DataBinder.Eval(Container.DataItem, "GroupID").ToString(),"&effectiveDate=",DataBinder.Eval(Container.DataItem, "EffectiveDate").ToString())) %> >

更新:通常,您应该始终确保对通过URL发送的数据进行编码,以确保恶意输入不会导致某种脚本注入、跨站点脚本攻击或其他邪恶意图。

您可以将日期时间作为Convert.ToDateTime(DataBinder.Eval(Container.DataItem, "EffectiveDate")).ToString("yyyyMMddHHmmss") 发送

然后您可以再次使用DateTime.ParseExact(dateString, "yyyyMMddHHmmss") 将查询字符串值转换回日期时间