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