0

所以我在我的cs页面上有这个代码,它从我的Url字符串中解码一个密钥。关键是“Reauth_URL”,它是一个以 base64 解码为 UTF8 的链接。

////base 64 decoding for Reauth_URL key in URL query string
    string encodedString =     Convert.ToString(HttpContext.Current.Request.Params["Reauth_URL"]).Trim(')');
    byte[] data = Convert.FromBase64String(encodedString);
    string decodedString = Encoding.UTF8.GetString(data);

我正在尝试使用 decodedString 但我不断收到空引用异常,但我可以看到键和值在那里。

一旦我可以返回字符串值 id,就可以将其发送到我的 aspx 页面上的超链接中。

编码的 url 是从 IronPort 设置的,如果用户被网站阻止,则允许用户以其他用户身份登录。所以查询字符串中的这个 reauth_url 键允许他们以不同的用户身份登录。reauth_url 需要解码并链接到超链接。我知道键和值在那里,但我无法通过这个空异常得到,当我说我知道它们在那里时,我显然不是在上面的代码中,我不得不将 url 查询拆分为?和 & 并在其他地方打印出来,它们就存在了。下面的代码是较早使用的,我需要的键和值就在那里。

string currentUrl = HttpContext.Current.Request.Url.Query;
    txtBlockedUrl.Visible = true;
    string [] result = currentUrl.Split(new  Char[]{'?','&'});

    foreach (string r in result)
    {
        txtBlockedUrl.Text += HttpUtility.UrlDecode(r) + "\n";
    }

div style="font-size: medium">
    <a href="<%=decodedString%>" style="text-decoration: none; border-bottom: 1px dotted blue;">LogIn as Different User</a>
</div>
4

2 回答 2

0

结束了这样做....

//splitting url string for textbox using name value collection
    NameValueCollection collection = new NameValueCollection();
    string currentUrl = HttpContext.Current.Request.Url.Query;
    string [] result = currentUrl.Split('&');
    foreach (string r in result)
    {
        string[] parts = HttpUtility.UrlDecode(r).Split('=');
        if (parts.Length > 0)
        {
            string key = parts[0].Trim(new char[] { '?', ' ' });
            string val = parts[1].Trim();

            collection.Add(key, val);
        }
    }
于 2013-10-28T19:22:30.097 回答
0

如果HttpContext.Current.Request.Params["Reauth_URL"]为空,Convert.ToString将抛出空引用异常。

请注意,当“Reauth_URL”不可用时, Params 索引器将返回。 所以你必须先检查它是否存在:(如果 url 没有提供呢?)null

string value = HttpContext.Current.Request.Params["Reauth_URL"];
if (value!=null) {
    string encodedString = Convert.ToString(HttpContext.Current.Request.Params["Reauth_URL"]).Trim(')');
    //...
于 2013-10-25T19:37:14.917 回答