【问题标题】:Why query string sends empty variables?为什么查询字符串发送空变量?
【发布时间】:2017-07-20 10:28:54
【问题描述】:

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

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

    }

【问题讨论】:

  • SharedUtility.EncryptURL() 方法返回哪种值?尝试使用&lt;%= SharedUtility.EncryptURL("n") %&gt; 来呈现文字字符串。
  • 它返回字符串数据,但在我的情况下它返回空字符串
  • 我试过你说的但还是空
  • SharedUtility.EncryptURL() 在其他场合是否正常工作或返回正确的值?最好在这里显示方法代码。 &lt;%# ... %&gt; 指令通常用于与数据绑定控件进行数据绑定。
  • 是的,我正在绑定控件,但为简单起见,我编写了 10 和 1,它们也作为空字符串传递。

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


【解决方案1】:

SharedUtility.EncryptURL("10")SharedUtility.EncryptURL("10") 返回写入的空字符串,这就是为什么你在那里没有价值。您需要解决该方法中的问题。如果您使用有关该方法的信息编辑您的问题,请在此处发表评论,以便我可以编辑我的答案。该参数看起来像一个键,您可能使用了错误的键。

【讨论】:

  • 您的方法中有异常,因此执行catch块并返回一个空字符串。你能调试你的代码并告诉我异常是什么以及在哪一行?
  • 好吧,我怀疑Convert.ToBase64String 抛出了一个异常,它通过返回空字符串默默地吸收。输入Exception.Message.ToString() 找出抛出的异常。
  • @TetsuyaYamamoto 它告诉了你什么?您可以使用异常的消息和堆栈跟踪来编辑您的问题吗?您可以通过 Exception 对象的 StackTrace 属性访问后者。
  • @LajosArpad OP 应该使用Exception.MessageException.StackTrace 属性编辑他的问题以提供错误详细信息和堆栈跟踪输出。假设 LoginOrganizationIDLoginRoleID 都正确转换为字符串值,如果没有抛出异常,该方法应该在 try 块中返回 Base64 编码的字符串。
  • @TetsuyaYamamoto 对不起,我以为你是问这个问题的人。我的错。
【解决方案2】:

使用 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 为 null 或空字符串

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

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

SHA1 哈希参考:

Hashing with SHA1 Algorithm in C#

【讨论】:

    猜你喜欢
    • 2016-01-17
    • 2022-09-23
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多