Url不是有效的虚拟路径

时间:2013-07-22 12:45:39

标签: c# asp.net webforms

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

如果我通过groupId并发出了MemberId,那就没关系。

<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&安培; EFFECTIVEDATE = 3 /二千○八分之三十一   12:00:00 AM'不是有效的虚拟路径。

从错误中可以看出,它正确地使用了生效日期的值。从第一个例子开始,这是唯一改变的东西,所以我不确定为什么它现在不起作用。

4 个答案:

答案 0 :(得分:5)

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

使用HttpUtility.UrlEncode对网址进行编码。或者如下面的评论所指定的那样。

答案 1 :(得分:2)

要添加上面的答案,OP应该使用WebUtility.HttpEncode(...)调用 传递给NavigateUrl的{​​{1}}属性的字符串:

Hyperlink

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

答案 2 :(得分:2)

传递HttpUtility.UrlEncode时使用TicksDateTime。我建议你在查询字符串中传递Ticks时传递DateTimeTicks是长数据类型,可以转换为DateTime

<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())%> >

答案 3 :(得分:1)

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

然后您可以使用DateTime.ParseExact(dateString, "yyyyMMddHHmmss")

再次将查询字符串值转换回日期时间