我试图通过查询字符串将值传递到另一个页面,但它将它们发送为空。为什么?
<a href='UpcomingNotifications.aspx?OrgID=<%# SharedUtility.EncryptURL("10") %>&RoleID=<%# SharedUtility.EncryptURL("1") %>'
target="_blank"
class="pull-right"
style="margin-top: -44px; margin-right: 6px;">
<asp:Label ID="lblUpcomingWorks" runat="server"
CssClass="btn btn-sm- btn-danger"
Text=" Upcoming Works Openings" Visible="false" />
</a>
输出: http://localhost:5297/forms/admin/UpcomingNotifications.aspx?OrgID=&RoleID=
更新:加密方法:
public static String EncryptURL(string strData)
{
try
{
if (!String.IsNullOrEmpty(strData))
{
SHA1Managed shaM = new SHA1Managed();
Convert.ToBase64String(shaM.ComputeHash(Encoding.ASCII.GetBytes(strData)));
Byte[] encByteData;
encByteData = ASCIIEncoding.ASCII.GetBytes(strData);
String encStrData = Convert.ToBase64String(encByteData);
return encStrData;
}
else
{
return "";
}
}
catch (Exception) { return ""; }
}
答案 0 :(得分:1)
SharedUtility.EncryptURL("10")
和SharedUtility.EncryptURL("10")
返回写入的空字符串,这就是为什么你没有值的原因。您需要解决该方法中的问题。如果您使用有关该方法的信息编辑您的问题,请在此处留下评论,以便我可以编辑我的答案。该参数看起来像一个键,您可能使用了错误的键。
答案 1 :(得分:0)
使用Base64字符串转换的SHA1哈希算法的实现应如下所示:
public static String EncryptURL(string strData)
{
try
{
if (!String.IsNullOrEmpty(strData))
{
using (SHA1Managed shaM = new SHA1Managed())
{
// ASCIIEncoding.ASCII.GetBytes should return same byte array in this case
byte[] encbytedata = Encoding.ASCII.GetBytes(strData);
byte[] hash = shaM.ComputeHash(encbytedata);
String encStrData = Convert.ToBase64String(hash);
return encStrData;
}
}
else
{
return "";
}
}
catch (Exception) { ... }
}
在OP给出的示例代码中,当满足以下条件之一时,将返回空字符串:
strData
为空或空字符串
由try-block抛出的异常触发的catch-block
由于EncryptURL
方法在使用LoginOrganizationID
和LoginRoleID
绑定到ASPX页面时使用了两次,因此在这种情况下可能以前的SHA1Managed
实例未正确处理或转换错误在try-block中创建散列URL时发生了这种情况,因此它通过将空字符串返回到href
属性(将根据来自OP的更多信息进行编辑)来抛出在catch-block中默默吸收的异常。
SHA1散列参考: