HttpContext.Current.Request.QueryString

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Peter

    HttpContext.Current.Request.QueryString

    Hi

    if I have a url/query like "localhost?a&b& c=123" then I thought I could
    get these parameters and values by using
    NameValueCollec tion query = HttpContext.Cur rent.Request.Qu eryString;

    But if I then try "query.AllK eys" I only get two keys, namely "null"
    and "c".

    Is this correct behaviour? Are "a" and "b" considered to be values for
    a null key - and how do I get them from the collection?


    Thanks,
    Peter
  • Frans Bouma [C# MVP]

    #2
    Re: HttpContext.Cur rent.Request.Qu eryString

    Peter wrote:
    Hi
    >
    if I have a url/query like "localhost?a&b& c=123" then I thought I could
    get these parameters and values by using
    NameValueCollec tion query = HttpContext.Cur rent.Request.Qu eryString;
    >
    But if I then try "query.AllK eys" I only get two keys, namely "null"
    and "c".
    >
    Is this correct behaviour? Are "a" and "b" considered to be values for
    a null key - and how do I get them from the collection?
    Shouldn't the query string be: "localhost?a=&b =&c=123" ?

    FB

    --
    ------------------------------------------------------------------------
    Lead developer of LLBLGen Pro, the productive O/R mapper for .NET
    LLBLGen Pro website: http://www.llblgen.com
    My .NET blog: http://weblogs.asp.net/fbouma
    Microsoft MVP (C#)
    ------------------------------------------------------------------------

    Comment

    • Peter

      #3
      Re: HttpContext.Cur rent.Request.Qu eryString

      Frans Bouma [C# MVP] wrote:
      if I have a url/query like "localhost?a&b& c=123" then I thought I
      could get these parameters and values by using
      NameValueCollec tion query = HttpContext.Cur rent.Request.Qu eryString;

      But if I then try "query.AllK eys" I only get two keys, namely "null"
      and "c".

      Is this correct behaviour? Are "a" and "b" considered to be values
      for a null key - and how do I get them from the collection?
      >
      Shouldn't the query string be: "localhost?a=&b =&c=123" ?
      Yes, I think you're right, the query should really look like that.

      I guess I should ignore any null keys I get from AllKeys (what can I
      use a null key for anyway?)

      Thanks,
      Peter

      Comment

      • Ignacio Machin ( .NET/ C# MVP )

        #4
        Re: HttpContext.Cur rent.Request.Qu eryString

        On Apr 25, 5:35 am, "Peter" <xdz...@hotmail .comwrote:
        Frans Bouma [C# MVP] wrote:
        >
        if I have a url/query like "localhost?a&b& c=123" then I thought I
        could get these parameters and values by using
        NameValueCollec tion query = HttpContext.Cur rent.Request.Qu eryString;
        >
        But if I then try "query.AllK eys" I only get two keys, namely "null"
        and "c".
        >
        Is this correct behaviour? Are "a" and "b" considered to be values
        for a null key - and how do I get them from the collection?
        >
           Shouldn't the query string be: "localhost?a=&b =&c=123" ?
        >
        Yes, I think you're right, the query should really look like that.
        >
        I guess I should ignore any null keys I get from AllKeys (what can I
        use a null key for anyway?)
        >
        Thanks,
        Peter
        Who is generating that query string?
        As Frans mentioned it's wrong.

        You should have default values for all your parameters, and then just
        update those with values in the QS.
        so all you have to do at the most is adding a if (key==null) continue;

        Comment

        • Peter

          #5
          Re: HttpContext.Cur rent.Request.Qu eryString

          Ignacio Machin ( .NET/ C# MVP ) wrote:
          On Apr 25, 5:35 am, "Peter" <xdz...@hotmail .comwrote:
          Frans Bouma [C# MVP] wrote:
          if I have a url/query like "localhost?a&b& c=123" then I thought
          I could get these parameters and values by using
          NameValueCollec tion query =
          HttpContext.Cur rent.Request.Qu eryString;
          But if I then try "query.AllK eys" I only get two keys, namely
          "null" and "c".
          Is this correct behaviour? Are "a" and "b" considered to be
          values for a null key - and how do I get them from the
          collection?
             Shouldn't the query string be: "localhost?a=&b =&c=123" ?
          Yes, I think you're right, the query should really look like that.

          I guess I should ignore any null keys I get from AllKeys (what can I
          use a null key for anyway?)

          Thanks,
          Peter
          >
          Who is generating that query string?
          As Frans mentioned it's wrong.
          >
          You should have default values for all your parameters, and then just
          update those with values in the QS.
          so all you have to do at the most is adding a if (key==null) continue;
          In my program I was using AllKeys, and looping over the keys doing some
          processing. Unfortunately I did not take account of the fact that a key
          could be null.

          A user decided to edit the query string himself, and then we got an
          exception.

          I did just like you said, and now check if the key is null before
          processing it.

          I can't really see the point in AllKeys returning a null key, but there
          you go...

          /Peter

          Comment

          • =?Utf-8?B?UGV0ZXIgQnJvbWJlcmcgW0MjIE1WUF0=?=

            #6
            Re: HttpContext.Cur rent.Request.Qu eryString

            It is very common to see querystrings with null key values (e.g., &ua=&bg=1 )
            rather than the key not being present. Just take a look at some google
            searches to see examples of this.
            -- Peter
            To be a success, arm yourself with the tools you need and learn how to use
            them.

            Site: http://www.eggheadcafe.com




            "Peter" wrote:
            Ignacio Machin ( .NET/ C# MVP ) wrote:
            >
            On Apr 25, 5:35 am, "Peter" <xdz...@hotmail .comwrote:
            Frans Bouma [C# MVP] wrote:
            >
            if I have a url/query like "localhost?a&b& c=123" then I thought
            I could get these parameters and values by using
            NameValueCollec tion query =
            HttpContext.Cur rent.Request.Qu eryString;
            >
            But if I then try "query.AllK eys" I only get two keys, namely
            "null" and "c".
            >
            Is this correct behaviour? Are "a" and "b" considered to be
            values for a null key - and how do I get them from the
            collection?
            >
            Shouldn't the query string be: "localhost?a=&b =&c=123" ?
            >
            Yes, I think you're right, the query should really look like that.
            >
            I guess I should ignore any null keys I get from AllKeys (what can I
            use a null key for anyway?)
            >
            Thanks,
            Peter
            Who is generating that query string?
            As Frans mentioned it's wrong.

            You should have default values for all your parameters, and then just
            update those with values in the QS.
            so all you have to do at the most is adding a if (key==null) continue;
            >
            In my program I was using AllKeys, and looping over the keys doing some
            processing. Unfortunately I did not take account of the fact that a key
            could be null.
            >
            A user decided to edit the query string himself, and then we got an
            exception.
            >
            I did just like you said, and now check if the key is null before
            processing it.
            >
            I can't really see the point in AllKeys returning a null key, but there
            you go...
            >
            /Peter
            >

            Comment

            • Peter

              #7
              Re: HttpContext.Cur rent.Request.Qu eryString

              Peter Bromberg [C# MVP] wrote:
              It is very common to see querystrings with null key values (e.g.,
              &ua=&bg=1 ) rather than the key not being present. Just take a look
              at some google searches to see examples of this.
              In your example there are no "null keys". You have a key called "ua"
              and a key called "bg".

              The value for ua is empty, and the value for bg is 1.

              If your query string was "&ua&bg=1" then AllKeys would return two keys:
              null and "bg".

              I don't really understand the point of a null key.



              /Peter

              Comment

              • =?Utf-8?B?UGV0ZXIgQnJvbWJlcmcgW0MjIE1WUF0=?=

                #8
                Re: HttpContext.Cur rent.Request.Qu eryString

                There needs to be an equals (=) sign after each key name.
                -- Peter
                To be a success, arm yourself with the tools you need and learn how to use
                them.

                Site: http://www.eggheadcafe.com




                "Peter" wrote:
                Peter Bromberg [C# MVP] wrote:
                >
                It is very common to see querystrings with null key values (e.g.,
                &ua=&bg=1 ) rather than the key not being present. Just take a look
                at some google searches to see examples of this.
                >
                In your example there are no "null keys". You have a key called "ua"
                and a key called "bg".
                >
                The value for ua is empty, and the value for bg is 1.
                >
                If your query string was "&ua&bg=1" then AllKeys would return two keys:
                null and "bg".
                >
                I don't really understand the point of a null key.
                >
                >
                >
                /Peter
                >

                Comment

                • Peter

                  #9
                  Re: HttpContext.Cur rent.Request.Qu eryString

                  Peter Bromberg [C# MVP] wrote:
                  There needs to be an equals (=) sign after each key name.
                  Yes indeed. I found that out. But what to do if a user enters the query
                  string in the browser....

                  It seems strange to me that (1) the browser (internet explorer) sends
                  an "illegal" query string; and (2) the AllKeys property returns a key
                  which is null - using a null key to retrieve a value from the
                  NameValueCollec tion results in an error of course.

                  /Peter

                  Comment

                  • =?Utf-8?B?UGV0ZXIgQnJvbWJlcmcgW0MjIE1WUF0=?=

                    #10
                    Re: HttpContext.Cur rent.Request.Qu eryString

                    I think it would be pretty rare for a web application that expects a user to
                    be creating their "own" querystrings. You can type whatever gobbledegook you
                    want after a URI in the Address Bar of your browser, and the browser will
                    happily attempt to retrieve the resource for you. Cheers.
                    -- Peter
                    To be a success, arm yourself with the tools you need and learn how to use
                    them.

                    Site: http://www.eggheadcafe.com




                    "Peter" wrote:
                    Peter Bromberg [C# MVP] wrote:
                    >
                    There needs to be an equals (=) sign after each key name.
                    >
                    Yes indeed. I found that out. But what to do if a user enters the query
                    string in the browser....
                    >
                    It seems strange to me that (1) the browser (internet explorer) sends
                    an "illegal" query string; and (2) the AllKeys property returns a key
                    which is null - using a null key to retrieve a value from the
                    NameValueCollec tion results in an error of course.
                    >
                    /Peter
                    >

                    Comment

                    • Peter

                      #11
                      Re: HttpContext.Cur rent.Request.Qu eryString

                      Peter Bromberg [C# MVP] wrote:
                      I think it would be pretty rare for a web application that expects a
                      user to be creating their "own" querystrings. You can type whatever
                      gobbledegook you want after a URI in the Address Bar of your browser,
                      and the browser will happily attempt to retrieve the resource for
                      you.
                      I don't know if we're talking/writing past each other here... but it
                      was never the idea that a user should write parameters in the url in
                      the browser. However, one of our users did (for their own nefarious
                      reasons), and that's when we discovered an error in our program.

                      The user wrote a query like "?a&b&c=123 ". It could very well be this is
                      an invalid query. The browser though, as you wrote, happily sent this
                      invalid query to our web-app.

                      The web-app received that invalid query, and as part of its normal
                      processing used the AllKeys property of
                      HttpContext.Cur rent.Request.Qu eryString to loop over all the keys. This
                      caused an unhandled error in our program because we were not aware that
                      a key could be null.

                      We are now aware of this fact, and have corrected our program to not
                      attempt to process any null keys. I am still surprised that AllKeys can
                      return a key which is null, but that's just life I guess :-)


                      Thanks,
                      Peter

                      Comment

                      • Ignacio Machin ( .NET/ C# MVP )

                        #12
                        Re: HttpContext.Cur rent.Request.Qu eryString

                        On Apr 25, 1:01 pm, "Peter" <xdz...@hotmail .comwrote:
                        Peter Bromberg [C# MVP] wrote:
                        >
                        There needs to be an equals (=) sign after each key name.
                        >
                        Yes indeed. I found that out. But what to do if a user enters the query
                        string in the browser....
                        >
                        It seems strange to me that (1) the browser (internet explorer) sends
                        an "illegal" query string; and (2) the AllKeys property returns a key
                        which is null - using a null key to retrieve a value from the
                        NameValueCollec tion results in an error of course.
                        >
                        /Peter
                        Hi,

                        Then you are playing with fire, just be ready for a var not to be
                        present, or as in your first post an incorrect QS.

                        Comment

                        • Peter

                          #13
                          Re: HttpContext.Cur rent.Request.Qu eryString

                          Ignacio Machin ( .NET/ C# MVP ) wrote:
                          On Apr 25, 1:01 pm, "Peter" <xdz...@hotmail .comwrote:
                          Peter Bromberg [C# MVP] wrote:
                          There needs to be an equals (=) sign after each key name.
                          Yes indeed. I found that out. But what to do if a user enters the
                          query string in the browser....

                          It seems strange to me that (1) the browser (internet explorer)
                          sends an "illegal" query string; and (2) the AllKeys property
                          returns a key which is null - using a null key to retrieve a value
                          from the NameValueCollec tion results in an error of course.

                          /Peter
                          >
                          Hi,
                          >
                          Then you are playing with fire, just be ready for a var not to be
                          present, or as in your first post an incorrect QS.
                          Yes, thanks, we've fixed our application now.

                          I guess QueryString interprets "a" and "b" in "localhost?a&b& c=123" as
                          values which don't have a parameter name.

                          I thought they'd be interpreted as parameter names which don't have any
                          values - but that would be "?a=&b=".

                          I may even use this at some stage if I can't think of a good name for a
                          parameter and I just want to send some values to my web-app.

                          Thanks,
                          Peter

                          Comment

                          Working...