base64解码URL上的空引用异常

时间:2013-10-25 17:20:25

标签: c# asp.net

所以我在我的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);

我正在尝试使用decodeString,但我继续获得null refence异常,但我可以看到键和值都存在。

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

编码的网址是从IronPort设置的,如果用户已被网站阻止,则允许用户以不同的用户身份登录。所以查询字符串中的reauth_url键允许它们以不同的用户身份登录。通过reauth_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>

2 个答案:

答案 0 :(得分:0)

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

请注意,{&#34; Reauth_URL&#34; Params indexer将返回null不可用。
所以你必须首先检查它是否存在:(如果url没有提供它会怎么样?)

string value = HttpContext.Current.Request.Params["Reauth_URL"];
if (value!=null) {
    string encodedString = Convert.ToString(HttpContext.Current.Request.Params["Reauth_URL"]).Trim(')');
    //...

答案 1 :(得分: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);
        }
    }