在我们的一个webforms应用程序中,我们有外部链接进入网站,其中有2个查询字符串参数,但第二个参数前面还有一个?。
通常情况下,你的查询字符串只有一个?,它位于第一个参数之前的开头,后面的任何参数都以&amp ;.开头。例如:
www.somesite.com?param1=a¶m2=b< ----这是正确形成的
www.somesite.com?param1=a?param2=b< ----这是畸形的
是的,我知道参数值可以包含问号,最好逃避它们,但我们没有这个问题。
这些网址来自外部来源,我们现在无法对它们做任何事情,但我们确实需要正确解析查询字符串。
使用上述格式错误的网址,Request.QueryString [" param1"]会产生:
一个?param2的= B
但如果网址形成正确,则会产生:
一
如果形式正确,Request.QueryString [" param2"]会产生:
B'/ P>
如果您无法解决问题的根源,如何最好地处理这种情况?我可能会添加url来到urlencoded网站。
答案 0 :(得分:0)
这是我提出的解决方案。只需修复查询字符串并重定向回来。在Page_Load中,我调用了这个ProcessQS方法,并添加了修复qs代码:
private bool ProcessQS()
{
var param1 = Request.QueryString["param1"];
if (string.IsNullOrWhiteSpace(param1))
return false;
// Workaround for external links that have ? instead of & for querystring parameter beyond the first.
// In this case, id should be preceded by &, this handles those urls that have a ? preceding id.
if (param1.Contains("?param2="))
{
var qs = Request.ServerVariables["QUERY_STRING"];
qs = HttpUtility.UrlDecode(qs);
Response.Redirect($"~/somepage.aspx?{qs.Replace("?param2=", "¶m2=")}", true);
}
return true;
}