开发者

Odd HttpRequest behaviour

I have a web service which runs with a HttpHandler class. In this class, I inspect the request stream for form / query string parameters. In some circumstances, it seemed as though these parameters weren't getting through. After a bit of digging around, I came across some behaviour I don't quite understand. See below:

// The request contains 'a=1&b=2&c=3'
// TEST ONLY: Read the entire request
string contents;
using (StreamReader sr = new StreamReader(context.Request.InputStream))
{
    contents = sr.ReadToEnd();
}
// Here 'contents' is usually correct - containing 'a=1&b=2&c=3'. Sometimes it is empty.

string a = context.Request["a"];

// Here, a = null, regardless of whether the 'contents' variable above is correct

Can anyone explain to me why this might be hap开发者_如何转开发pening? I'm using a .NET WebClient and UploadDataAsync to perform the request on the client if that makes any difference.

If you need any more information, please let me know.


Why are you inspecting the request stream for query string parameters? There are a lot of built in types within .Net to deal with HTTP Requests. You can easily get a proper NameValueCollection from the querystring with the following code;

NameValueCollection queryStringValues =
    HttpUtility.ParseQueryString(HttpContext.Current.Request.Query.ToLower());

string value = queryStringValues["my_key"];

In your code you have a StreamReader read the stream and assign this to a string variable called contents. However when you assign the value to string a you access a variable called context which I assume is really HttpContext.Current. You then use the Request object as a NameValueCollection. When you access the Request collection like that it looks for both POST and GET parameters checking both Request.Form and Request.QueryString.

Unless something further up the HTTP request pipeline is changing the request enroute you won't loose parameters. Use a proxy tool like Fiddler or Charles to inspect the request as it leaves the browser.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜