我在 Visual Studio 2010 创建网站。所以,我应该打开一个新表单并从第一个表单发送信息。我使用了文本文件(我从第一个页面写入文件并以新形式读取此文件)并且这是有效的。但我想通过 GET/POST 请求创建连接。我从 How to make an HTTP POST web request 获得此代码。 项目正在编译,但超出了时间限制。所以,底部我附上了代码和错误。
来自第一页的代码
var request = (HttpWebRequest)WebRequest.Create("http://localhost:55590/WebSite2/Form2.aspx");
var postData = text;
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
来自第二页的代码
var request = (HttpWebRequest)WebRequest.Create("http://localhost:55590/WebSite2/Form2.aspx");
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
错误
Operation timed out
Description: An unhandled exception occurred while executing the current web request. Examine the stack trace for more information about this error and the code snippet that caused it.
Exception Details: System.Net.WebException: The operation timed out
Source error:
136: }
137:
138: var response = (HttpWebResponse)request.GetResponse(); // Error here
139:
140: var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
我尝试了源代码中的第二个变体,但出现错误。所以,请帮帮我
答案 0 :(得分:1)
因此有很多方法可以将数据和“事物”从一个网页发送到下一个网页。
Session() 当然是一种可能的方式。
另一个是在 URL 中使用参数,因此在许多网站上经常会看到这种参数
即使在我写这篇文章的时候 - 我们在 StackOverFlow 上看到的 URL 是这样的:
stackoverflow.com/questions/66294186/http-request-get-post?noredirect=1#comment117213494_66294186
所以,上面是堆栈溢出是如何传递值的。
所以 session() 和 URL os 中的参数是通用的。
但是,asp.net net 有一个“功能”,您可以在其中将上一页传递到下一页。因此,从您加载的下一页的第一页中简单地提取/获取/抓取/使用东西就变得简单了。所以这个功能是asp.net的一部分,它会为你完成传递前一页的所有肮脏工作!!!
嗯,我想知道人们是否必须从上一页传递和获取值?我敢打赌这个最常见的想法必须被处理,对吗?这不仅是人类呼吸空气之类的常见说法吗?这也是asp.net的一个特性。
那么,一个非常简单的方法是当您单击一个按钮时,然后跳转到有问题的下一页?好吧,如果设置正确,那么您可以简单地使用“上一个”页面!!!
您可以在页面加载时执行此操作:
if (IsPostBack == false)
{
TextBox txtCompay = PreviousPage.FindControl("txtCompnay");
Debug.Print("Value of text box company on prevous page = " + txtCompay.Text);
}
这种方法很好,因为您实际上不必提前决定是否需要来自上一页控件的 2 或 20 个值 - 您真的不在乎。
这是如何工作的?
上一页仅基于两种方法有效。
第一种方式:
您在表单上放置的按钮通常会有“代码隐藏”,当然会跳转或转到相关的下一页。
那个命令(在代码后面)是典型的:
Response.Redirect("some aspx web page to jump to")
以上不通过上一页
但是,如果您使用它:
Server.Transfer("some aspx web page to jump to")
那么上一页就通过了,可以使用了!!!
因此,在下一页中,在页面加载事件中,您可以按上述方式使用“prevouspage”。
所以 Server.Transfer("to the next page") 将允许在您的代码中使用“上一页”。
因此您可以选择任何控件、任何值。您甚至可以引用 gridview 和用户选择的行。实际上,整个前一页都被转移并可以在上述“前一页”中使用。您无法获取视图状态,但您可以在上一页中设置公共方法以在需要时公开视图状态的成员。
您当然必须使用 FindControl,但它是上一页。
另一种方式(允许使用上一页)。
您不使用隐藏代码来触发跳转到新页面(使用 Server.Transfer()),而是在第一页的按钮中设置回传 URL。这就是回传 URL 的用途!!! (将当前页面传递给回发 URL)。
例如:
<asp:Button ID="Button1" runat="server" Text="View Hotels"
PostBackUrl="~/HotelGrid.aspx" />
因此您使用按钮的“回发”URL 功能。
现在,当您单击该按钮时,它将跳转到第 2 页,并且可以再次按上述方式使用上一页。当然,如果设置了回传 URL,那么您当然不需要存根代码来跳转到该页面。
所以这在很大程度上是asp.net 的一个“基本”功能,并且是一种将上一页转移到下一页的内置方法。有点像asp.net“101”。
所以这可能很常见,实际上最常见的基本需要传递来自前一个网页的值不仅是内置的,而且实际上被称为“上一页”!!!!!!
规则:
Previous page only works if you use a Server.Transfer("to the page")
Response.Request("to the page") does NOT allow use of previous page.
using the post-back URL of a button (or in fact many other controls) also
have a post-back URL setting - and again if that control has post-back URL, then
again use of previous page is allowed due to that control causing such page
navagation.
The previous page can ONLY be used on the first page load (ispostBack = False).
在按钮中使用回发 URL 当然意味着页面跳转不需要存根代码。再一次,使用回传 URL 将确保上一页可以在下一页中使用。
但是,在那些您不想硬编码 URL 的情况下,或者在导航到下一页之前,按钮代码存根中可能会出现一些附加逻辑? (或者甚至会发生??)。
然后,好吧,回传 URL 并不是那么实用,但是您可以在后面的代码中诉诸并使用 Server.Transfer(),这再次允许使用内置的“上一页”。
请记住,您需要/想要/将从上一页抓取的任何内容都必须在我们跳转到的那个页面的第一页加载时发生。在第一页加载发生后,任何附加按钮回发和常规生命周期以及该页面后面代码中控件和事件的使用将不会使用上一页。 (上一页将为空且为空)。
答案 1 :(得分:0)
你可以这样试试。
var request = (HttpWebRequest)WebRequest.Create("http://localhost:55590/WebSite2/Form2.aspx");
var postData = text;
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
result = streamReader.ReadToEnd();
}