ASP.Net WebForms格式错误的查询字符串,?而不是&

时间:2018-04-03 19:47:31

标签: asp.net webforms query-string

在我们的一个webforms应用程序中,我们有外部链接进入网站,其中有2个查询字符串参数,但第二个参数前面还有一个?。

通常情况下,你的查询字符串只有一个?,它位于第一个参数之前的开头,后面的任何参数都以&amp ;.开头。例如:

www.somesite.com?param1=a&param2=b< ----这是正确形成的

www.somesite.com?param1=a?param2=b< ----这是畸形的

是的,我知道参数值可以包含问号,最好逃避它们,但我们没有这个问题。

这些网址来自外部来源,我们现在无法对它们做任何事情,但我们确实需要正确解析查询字符串。

使用上述格式错误的网址,Request.QueryString [" param1"]会产生:

一个?param2的= B

但如果网址形成正确,则会产生:

如果形式正确,Request.QueryString [" param2"]会产生:

B'/ P>

如果您无法解决问题的根源,如何最好地处理这种情况?我可能会添加url来到urlencoded网站。

1 个答案:

答案 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=", "&param2=")}", true);
        }

        return true;
    }