C# 过帐后未获取预期的响应数据

C# 过帐后未获取预期的响应数据,c#,asp.net,post,get,httpwebrequest,C#,Asp.net,Post,Get,Httpwebrequest,早些时候,我在发布数据和获取响应方面遇到了问题,我终于能够发布数据,但是响应没有给我正确的结果,我浏览了Web表单,然后用visual studio运行了代码,并使用Fiddler比较了Web表单,从我所看到的情况来看,它是正确填充的。 然后,我通过网站和VisualStudio比较了这两个结果,并对它们进行了比较,我没有得到我应该得到的结果,我不知道为什么,在过去的几个小时里,我一直在努力找出我做错了什么(我之前有过一个问题,并且对我要做的事情有过一些指导,所以如果你之前看到过类似的事情,那么

早些时候,我在发布数据和获取响应方面遇到了问题,我终于能够发布数据,但是响应没有给我正确的结果,我浏览了Web表单,然后用visual studio运行了代码,并使用Fiddler比较了Web表单,从我所看到的情况来看,它是正确填充的。 然后,我通过网站和VisualStudio比较了这两个结果,并对它们进行了比较,我没有得到我应该得到的结果,我不知道为什么,在过去的几个小时里,我一直在努力找出我做错了什么(我之前有过一个问题,并且对我要做的事情有过一些指导,所以如果你之前看到过类似的事情,那么所有的道歉,我必须说得更清楚)

这是我写的代码

 public static string PostMyData()
    {
        // This is where the data is going to be posted
        string url = @"http://www.cpso.on.ca/Public-Register/All-Doctors-Search.aspx";

        // This is the data that i am going to post
        string postData = "manScript_HiddenField=&" +
            "__EVENTTARGET=p%24lt%24ctl03%24pageplaceholder%24p%24lt%24ctl03%24AllDoctorsSearch%24btnSubmit&" +
            "__EVENTARGUMENT=&__LASTFOCUS=&lng=en-CA&p%24lt%24ctl00%24SearchBox%24txtWord=Site+Search&p%" + 
            "24lt%24ctl03%24pageplaceholder%24p%24lt%24ctl03%24AllDoctorsSearch%24txtLastName=Aalders&p%" +
            "24lt%24ctl03%24pageplaceholder%24p%24lt%24ctl03%24AllDoctorsSearch%24txtFirstName=&p%" +
            "24lt%24ctl03%24pageplaceholder%24p%24lt%24ctl03%24AllDoctorsSearch%24grpGender=+&p%" +
            "24lt%24ctl03%24pageplaceholder%24p%24lt%24ctl03%24AllDoctorsSearch%24ddLanguage=08&p%" +
            "24lt%24ctl03%24pageplaceholder%24p%24lt%24ctl03%24AllDoctorsSearch%24grpDocType=rdoDocTypeAll&p%" +
            "24lt%24ctl03%24pageplaceholder%24p%24lt%24ctl03%24AllDoctorsSearch%24grpStatus=rdoStatusActive&p%" +
            "24lt%24ctl03%24pageplaceholder%24p%24lt%24ctl03%24AllDoctorsSearch%24ddCity=Select --%3E&p%" +
            "24lt%24ctl03%24pageplaceholder%24p%24lt%24ctl03%24AllDoctorsSearch%24txtPostalCode=&p%" +
            "24lt%24ctl03%24pageplaceholder%24p%24lt%24ctl03%24AllDoctorsSearch%24ddHospitalCity=Select+--%3E&p%" +
            "24lt%24ctl03%24pageplaceholder%24p%24lt%24ctl03%24AllDoctorsSearch%24ddHospitalName=-1&" +
            "__VIEWSTATE=";

        // Create my request
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        req.ContentLength = postData.Length;
        req.Referer = @"http://www.cpso.on.ca/Public-Register/All-Doctors-Search.aspx";
        req.Accept = "text/html, application/xhtml+xml, */*";
        req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko";

        // Now its time to write the data that I want to post to the webpage
        using (StreamWriter reqWriter = new StreamWriter(req.GetRequestStream()))
        {
            reqWriter.Write(postData);
        }

        // Get the response/results

        string respData = string.Empty;

        using (StreamReader responseReader = new StreamReader(req.GetResponse().GetResponseStream()))
        {
            // Add response/results to string
            respData = responseReader.ReadToEnd();
        }

        return respData;

    }
我在返回respData时设置了一个断点,它应该显示一条记录,但没有显示任何记录

以下是图片,其中一张是Fiddler中显示的网络表单,通过实际的网络表单

这是我在VisualStudio中运行它的一个例子,这让我相信我正确地发布了它,因为它是相同的


看起来像是发布到
/Public Register/All doctor Search.aspx的表单,但浏览器被重定向到
/Public Register Info-(1)/医生搜索结果
以显示结果。他们似乎在使用ASP.NET会话来维护两个页面之间的状态。由于会话依赖于cookie,您必须通过创建
CookieContainer
在您的
HttpWebRequest上启用cookie

// Create my request
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.CookieContainer = new CookieContainer();

现在它应该可以工作了:

哇,我所缺少的只是一段代码。谢谢你帮我清理了这段代码。另外一个好处是我直到现在才知道ASP.NET有一把小提琴:-)是的。它很方便。希望你没有用这个做任何坏事。:)我甚至不知道从哪里开始做坏事,哈哈。你有没有办法帮我得到下一页的结果?我尝试了许多不同的方法,并不断出错,试图获得第二页的响应WebForms使用viewstate来维护页面之间的状态。从第一个响应中获取viewstate,并将其与下一个响应一起发送。这段代码可以使用一些主要的重构和错误检查,但看起来像这样。。。