2017-03-01 53 views
0

我想通过查询字符串将值传递给另一页,但它将它们发送为空。为什么?为什么查询字符串发送空变量?

<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

哪一种由'SharedUtility.EncryptURL()'方法返回的值?尝试使用'<%= SharedUtility.EncryptURL(“n”)%>'来呈现文字字符串。 –

+0

它返回字符串数据,但在我的情况下,它返回空字符串 – Covert

+0

,我试着你说的,但仍然是空的 – Covert

回答

1

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

+0

您在该方法中有一个异常,因此执行catch块并返回一个空字符串。你能调试你的代码,并告诉我什么是异常,并在哪一行? –

+0

确定我在做 – Covert

+0

好吧,我怀疑'Convert.ToBase64String'抛出了一个被默认吸收的异常,它返回空字符串。放入'Exception.Message.ToString()'来找出抛出的异常。 –

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

由于做使用LoginOrganizationIDLoginRoleID结合ASPX页面时所使用EncryptURL方法两次,在这种情况下有可能以前的SHA1Managed实例尚未过程中的try块创建散列URL适当处置或者已经发生转换错误,因此它通过将空字符串返回到href属性(将根据来自OP的进一步信息进行编辑)来抛出异常,它默默地吸收了catch-block。

SHA1散列参考:

Hashing with SHA1 Algorithm in C#