为什么查询字符串发送空变量?

时间:2017-03-01 07:43:33

标签: c# asp.net .net c#-4.0 webforms

我试图通过查询字符串将值传递到另一个页面,但它将它们发送为空。为什么?

 <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 ""; }

    }

2 个答案:

答案 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给出的示例代码中,当满足以下条件之一时,将返回空字符串:

  1. strData为空或空字符串

  2. 由try-block抛出的异常触发的catch-block

  3. 由于EncryptURL方法在使用LoginOrganizationIDLoginRoleID绑定到ASPX页面时使用了两次,因此在这种情况下可能以前的SHA1Managed实例未正确处理或转换错误在try-block中创建散列URL时发生了这种情况,因此它通过将空字符串返回到href属性(将根据来自OP的更多信息进行编辑)来抛出在catch-block中默默吸收的异常。

    SHA1散列参考:

    Hashing with SHA1 Algorithm in C#